🐍

【Pythonクローラー入門】SeleniumによるWebクローラーの開発

5 min read


元記事:https://www.octoparse.jp/blog/build-a-web-crawler-with-selenium-and-python/

Webサイトから大量のデータをできるだけ早く取得する必要があるとします。それぞれのWebサイトに手動でアクセスして、コピペでデータを取得することなく、どうやって自動的にデータを取得するのでしょうか?その答えが「Webスクレイピング」です。Webスクレイピングに通じて、この作業を自動化にしてくれます。

今回はPythonでWebサイトからデータをクローニングして、CSVファイルに書き込むというようなWebクローラーを実際に作成してみましょう。

一、必要なPython開発環境を導入

Pythonには、プログラムを組むために便利な標準ライブラリが数多くあります。今回は、以下のライブラリを使用しています。

Selenium ーー ブラウザを自動的に操作するライブラリです。主にWebアプリケーションのテストやWebスクレイピングに利用されます。
BeautifulSoup ーー HTMLおよびXMLドキュメントを解析するためのPythonパッケージです。
csv ーー CSVフォーマットで保存するために使用されます。

したがって、プログラミングを実戦する前に、以下の準備が必要となります。

・Python 2.xまたはPython 3.xの環境
・Selenium、BeautifulSoup、csvライブラリの導入
・Google Chrome ブラウザ

それでは、早速始めましょう!

二、ページ要素(HTMLドキュメント)の検証

Webサイトから、要素(HTMLドキュメント)を検証し、データがどのように構成されているかを分析する必要があります。HTML基礎知識はこちらのリンクで参照ください。今回はテーブルのデータを抽出するように試してみましょう。
Ctrl + Shift + I を押して、テーブルの要素を指定すると、HTMLのソースコードに表示されます。

したがって、テーブルの要素名は「table」と分かっています。
なお、Webクローラーを構築するたびに、HTMLドキュメント内の要素を定位するため、xPathの知識が必要となります。xPathのチュートリアルはこちらのリンクからアクセスできます。

三、コードを書く

1.まず、必要なライブラリをすべてインポートしましょう。

web-scraping.py
import csv # csvモジュールをインポート
from selenium import webdriver # selenium webdriver をインポート
from bs4 import BeautifulSoup # BeautifulSoup をインポート

2.Webdriverを使用する前に、chromedriverへのパスを設定する必要があります。
※/path/to/chromedriverをWebdriverのパスに変更してください。

web-scraping.py
driver = webdriver.Chrome("/path/to/chromedriver")

3.以下のコードを参照してURLを開いてください。

web-scraping.py
driver.get("http://test-sites.octoparse.com/?page_id=192")

4.URLを開くためのコードが書けたところで、いよいよWebサイトからデータを抽出します。
先に述べたように、抽出したいデータは<table>要素に入っています。データを持つ<tr>要素を探し出し、データを抽出します。以下のコードを参照してください。

web-scraping.py
content = driver.page_source
BS = BeautifulSoup(content, "html.parser")
table = BS.findAll("table", {"class":"wp-block-table is-style-stripes"})[0] # テーブル"wp-block-table is-style-stripes"を指定
rows = table.findAll("tr") # テーブル中<tr>要素の内容を抽出
print(rows) # 抽出したHTMLドキュメントを検証

最後に、web-scraping.pyで保存します。

四、コードを実行してデータを抽出する

コードを実行して、必要なHTMLドキュメントを正しく抽出するかどうかを確認します。

五、データを必要なフォーマットで保存

データを抽出した後、抽出したデータをCSV(Comma Separated Value)形式で保存します。そのため、コードに以下の内容を追加します。

web-scraping.py
with open("web-scraping.csv", "w", encoding='utf-8', newline="") as file: # ファイル名は「web-scraping.csv」を指定する
    writer = csv.writer(file)
    for row in rows:
        csvRow = []
        for cell in row.findAll(['td', 'th']): # tdとth要素をループでファイルに書き込む
            csvRow.append(cell.get_text())
        writer.writerow(csvRow)

六、Pythonでスクレイピングしましょう

それは最終的なコードです。

追加した後、もう一度コード全体を実行してみてください。
抽出結果は「web-scraping.csv」というファイル名が作成され、このファイルに抽出されたデータが格納されます。

七、Octoparseでスクレイピングする方法

プログラミングが苦手、或いは英語のコードばかりなので苦手意識を持っている方は、スクレイピングツールのOctoparseはおすすめします。

Octoparseは「自動識別」機能があるので、ページのURLを入力するだけで、Webページ上各項目のデータ(テキストとリンクを含む)、「次のページ」ボタン、「もっと見る」ボタン、およびページのスクロールダウンを自動的に検出し、タスク(Webクローラー)を自動的に生成することができます。

早速ですが、Octoparseで自動化の魅力を体験してみましょう。

1.Octoparseを起動して、スクレイピングしたいWebページのURLを入力します。
「抽出開始」 ボタンをクリックして進みます。

2.Octoparseでページが読み込みされたら、自動的にページ上の内容を識別します。
自動識別とは、自動的にページ上の必要なデータを検出して識別するという役立つ機能です。ポイント&クリックをする必要はなく、Octoparseは自動的に処理します。

3.識別が完了すると、データプレビューで識別したデータを表示され、確認してから「ワークフローの生成」ボタンを押します。

4.これで簡単にWebクローラーが作成しました!
上の「実行」ボタンをクリックして、すぐデータを抽出できます。簡単ではないでしょうか。

八、まとめ

Pythonでスクレイピングはそんなに簡単ではないので、学ぶ時間がなく、効率的にスクレイピングがしたい、プログラミングが苦手、或いは英語のコードばかりなので苦手意識を持っている方はスクレイピングツールはおすすめです。

関連記事
PHPで簡単なWebクローラーを作ってみた
PythonによるWebスクレイピングを解説
Python vs Octoparse!初心者向きのスクレイピング方法はどっち?
【初心者向け】ExcelとVBAでWebスクレイピング実戦!!

Discussion

ログインするとコメントできます