1
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-04-30

【Pythonクローラー入門】 SeleniumによるWebクローラーの開発.png
元記事: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のソースコードに表示されます。
1_htmlコード.png

したがって、テーブルの要素名は「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サイトからデータを抽出します。
先に述べたように、抽出したいデータは

要素に入っています。データを持つ要素を探し出し、データを抽出します。以下のコードを参照してください。
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ドキュメントを正しく抽出するかどうかを確認します。
2_Selenium_HTML_code.png

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

データを抽出した後、抽出したデータを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でスクレイピングしましょう

それは最終的なコードです。
4.code.png

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

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

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

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

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

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

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

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

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

八、まとめ

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

Octoparse_無料トライアル.png

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

1
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?