メニュー

Selenium│ページの内のブログカードのリンクを取得する方法│スクレイピング

ひさしぶりにSeleniumを使ってスクレイピングをしてみました。

実際には別の目的でツールを作ってみたのですが、

本記事では本サイトのTOPページに掲載しているブログカードのタイトルとリンクをCSVで出力してみたいと思います。

海外でフリーランスをしているテクニカルアーティスト
ゲーム開発・映像制作・WEB制作等を請け負っています。
当ブログは作業効率化のための技術ブログです。

目次

Seleniumの環境構築

以前も記事に環境構築方法を記載していますので、簡単に書きます。

  • Pythonのインストール
  • Seleniumのインストール
  • テキストにコードを記載して.pyで保存
  • ダブルクリックで実行といった感じです。

Windowsでユーザー名のフォルダ直下にpythonというフォルダを作成。

chromedriver.exeと.pyのファイルを置いて、そこから実行しています。

直接.pyを実行するとエラーで落ちて読み取れないことがあるので、下記のようなbatを噛ますとエラーが見やすいです。

sample.py
pause

ちなみに2021年にSeleniumの仕様が変わってBYまわりのコマンドが変わっていますので注意。

Selenium│ページの内のブログカードのリンクを取得する方法

下記に記載したpythonコードを実行するとcsvファイルが出力。

csvファイルを開くとTOPページのブログカードのすべてのタイトルとリンクが取得できます。

コードは以下の通り。

driver = webdriver.Chrome("C:/Users/suimin/python/chromedriver.exe",options=options)にchromedriver.exeのパスを記載。

site_url = "https://cg-method.com/"に調べたいページのURLを記載するだけです。

SWELLというWordPressテーマのソースコード、liを指定して、そのすべての要素を取得。

さらにそのリスト以下のタイトルとURLだけを取得。

それらを配列に格納して、csvに書き込んでいるだけです。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import csv

#オプション(エラーメッセージを非表示+ヘッドレスモード)
options = Options()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
options.use_chromium = True
options.add_argument("--headless")
driver = webdriver.Chrome("C:/Users/suimin/python/chromedriver.exe",options=options)

#CSVファイル
filename = "sample"  + ".csv"
f = open(filename, "w", encoding="CP932", errors="ignore")
writer = csv.writer(f, lineterminator='\n')

#URL
site_url = "https://cg-method.com/"
driver.execute_script("window.open()") 
driver.switch_to.window(driver.window_handles[-1])
driver.get(site_url)

#項目を記載
header = ["ID","TITLE","URL"]
writer.writerow(header)

#要素の取得
item = 1
elems= driver.find_elements(By.CLASS_NAME,"p-postList__item")
for elem in elems:
    csvlist = []
    csvlist.append(str(item)) 
    title = elem.find_elements(By.CLASS_NAME,"p-postList__title") 
    link = elem.find_elements(By.CLASS_NAME,"p-postList__link")     
    csvlist.append(title[0].text)
    csvlist.append(link[0].get_attribute("href") )
    writer.writerow(csvlist)
    item = item + 1

# 閉じる
f.close()

まとめ

以前のSeleniumの記事は特定のページにログインしてクリックするという内容でした。

自動で勤怠ボタンを押したりとかできる。。。

本記事はまじめにスクレイピングをしてみました。

たとえばデータベース系のサイトを作っている人の場合は、こういったツールを作って必要な情報を自動で取得。

あとは整形して、csvから自動記事投稿みたいなこともできます。

気になった方は是非、Seleniumを調べてみてください。

全記事一覧

  • URLをコピーしました!
目次