任意の単語で検索しタイトルとURLを抽出するスクレイピング


実際の業務でも活用しているツールの内の一つをご紹介します。

crawl_scraping.py

from bs4 import BeautifulSoup
from selenium import webdriver

import pandas as pd
import csv
import time

#作成したExcel/Csvを保存するフォルダを指定
export_file_path="**********"

#ブラウザの立ち上げ
browser=webdriver.Chrome("**********")
browser.implicitly_wait(1)

url="**********"
#指定したURLへ遷移する
browser.get(url)

#検索ボックスを指定
elem=browser.find_element_by_name("**********")
elem.clear()

#任意のキーワードをinput()関数にて入力
elem.send_keys(input("**********"))
time.sleep(1)

#検索ボタンをクリック
browser_from=browser.find_element_by_xpath("**********")
browser_from.click()

#任意のボタンをクリック
browser_from=browser.find_element_by_xpath("**********")
browser_from.click()

#任意のページ数をクローリング
#range()関数内の数値を減らしたり増やしたりしてクロール数を調整
for i in range(30):
    #ブラウザで開いたページのhtmlを取得
    soup=BeautifulSoup(browser.page_source,"lxml")

    #抽出したいデータを解析
    a=soup.find_all("*****",{"*****":"*****"})

    #タイトルを取得
    title=[i.find("*****").string for i in a]

    #URLを取得
    url=[i.find("*****").attrs["*****"] for i in a]

    #タイトルとURLという辞書型を作成
    dict_from={"タイトル":title,"URL":url}

    #作成した辞書型からデータフレームに変換
    title_list=pd.DataFrame.from_dict(dict_from)

    #指定したフォルダにExcel/Csvを名前を付けて保存
    with open(export_file_path + "\\" + "**********",mode="a",
              encoding="Shift-JIS",newline="",errors="ignore") as f:
        title_list.to_csv(f)

    #指定したページ数に満たない場合エラーを吐いて停止しないようにします
    try:
        #指定したボタンがある限りクリックを繰り返します
        browser_from=browser.find_element_by_xpath("**********")
        browser_from.click()
    except:
        #指定したボタンが無くなればブラウザを閉じて終了させます
        browser.close()

        break

上記Pythonスクリプトは任意のブラウザのクロールとスクレイピングを組み合わせたコードです。
業務では毎日違った任意の検索キーワードに関連したURLとタイトルをcsvに追加保存する形で使っています。
ブラウザ操作する時は負荷をかけないようにtimeモジュールを使って少し時間をおきながら実行します。
わざわざブラウザを立ち上げなくてもデータの抽出は可能なのですが、上記コードの方が他のURLでも対応しやすいです。
ブラウザの操作、抽出したいデータ、保存ファイル形式とそれぞれで変更を加えるだけで様々なページのデータをExcel/Csvに出力することが可能となります。
また今回はファイル保存モードを“a”に指定することで毎日変更があるページや違う検索キーワードの結果でも、データを同じファイルに追加で保存していくようにしています。

まとめ

以上、業務でも使用できるブラウザの立ち上げ、ページ遷移、データ抽出、Excel/Csvファイル出力でした。
良い点としてはあらゆるURLの形式に対応可能な点です。検索ボックスに好きな単語を指定し任意のデータを抽出することが出来ます。毎日変更が加えられるページでも対応可能です。
悪い点としては一般的なクロールスクレイピングに比べると少し時間がかかる点です。ブラウザの立ち上げからtimeモジュールを使用していますので、出力までに少し時間がかかってしまいます。
とはいっても体感ですが約500個のデータが出力されるまでおよそ30秒~1分程ですので、手作業で毎日業務をすることに比べれば圧倒的にこちらの方が早く済ますことが出来ます。