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

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のソースコードに表示されます。

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

 

三、コードを書く

1. まず、必要なライブラリをすべてインポートしましょう。
import csv # csvモジュールをインポート
from selenium import webdriver # selenium webdriver をインポート
from bs4 import BeautifulSoup # BeautifulSoup をインポート


2. Webdriverを使用する前に、chromedriverへのパスを設定する必要があります。

/path/to/chromedriverWebdriverのパスに変更してください。
driver = webdriver.Chrome("/path/to/chromedriver")


3. 以下のコードを参照してURLを開いてください。
driver.get("http://test-sites.octoparse.com/?page_id=192")

 

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

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ドキュメントを正しく抽出するかどうかを確認します。
selenium_html_code

 

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

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

with open("web-scraping.csv", "w", encoding='utf-8') 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でスクレイピングしましょう

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

code

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

csv

 

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

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

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

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

 

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

octoparse

 

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

octoparse_自動識別

 

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

octoparse_自動識別結果

 

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

octoparse_抽出結果

 

 

八、まとめ

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

 

 

 

 

関連記事


PHPで簡単なWebクローラーを作ってみた

PythonによるWebスクレイピングを解説

Python vs Octoparse!初心者向きのスクレイピング方法はどっち?

【初心者向け】ExcelとVBAでWebスクレイピング実戦!