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

![【Pythonクローラー入門】 SeleniumによるWebクローラーの開発.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/cd96e554-d64b-6c53-8e08-c9c5236620f4.png)
元記事：[https://www.octoparse.jp/blog/build-a-web-crawler-with-selenium-and-python/](https://www.octoparse.jp/blog/build-a-web-crawler-with-selenium-and-python/)

Webサイトから大量のデータをできるだけ早く取得する必要があるとします。それぞれのWebサイトに手動でアクセスして、コピペでデータを取得することなく、どうやって自動的にデータを取得するのでしょうか？その答えが「[Webスクレイピング](https://www.octoparse.jp/blog/web-scraping/)」です。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基礎知識は[こちらのリンク](https://developer.mozilla.org/ja/docs/Learn/Getting_started_with_the_web/HTML_basics)で参照ください。今回はテーブルのデータを抽出するように試してみましょう。
Ctrl + Shift + I を押して、テーブルの要素を指定すると、HTMLのソースコードに表示されます。
![1_htmlコード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/35aaaa3b-d08a-8b07-fe80-b4ce91918881.png)

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


# 三、コードを書く
**1.まず、必要なライブラリをすべてインポートしましょう。**

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


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

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

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

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

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

```python: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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/7f817be4-4c12-8967-cda9-e74aa3beaaec.png)


# 五、データを必要なフォーマットで保存
データを抽出した後、抽出したデータをCSV（Comma Separated Value）形式で保存します。そのため、コードに以下の内容を追加します。

```python: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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/96260e0a-4a3b-4b8d-d535-57521da79b2d.png)


追加した後、もう一度コード全体を実行してみてください。
抽出結果は「web-scraping.csv」というファイル名が作成され、このファイルに抽出されたデータが格納されます。
![3_CSV.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/224c346e-39b5-b0d9-5897-5ae6fdbc4289.png)


# 七、Octoparseでスクレイピングする方法
プログラミングが苦手、或いは英語のコードばかりなので苦手意識を持っている方は、スクレイピングツールの[Octoparse](https://www.octoparse.jp/)はおすすめします。

Octoparseは「[自動識別](https://helpcenter.octoparse.jp/hc/ja/articles/360013561999-Octoparse%E3%82%92%E3%82%82%E3%81%A3%E3%81%A8%E7%9F%A5%E3%82%8B-)」機能があるので、ページのURLを入力するだけで、Webページ上各項目のデータ（テキストとリンクを含む）、「次のページ」ボタン、「もっと見る」ボタン、およびページのスクロールダウンを自動的に検出し、タスク（Webクローラー）を自動的に生成することができます。

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

 

**1.Octoparseを起動して、スクレイピングしたいWebページのURLを入力します。**
「抽出開始」 ボタンをクリックして進みます。
![13.Octoparse.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/80278ec9-58d9-d27a-0ad1-e89059f4ee17.png)


 

**2.Octoparseでページが読み込みされたら、自動的にページ上の内容を識別します。**
自動識別とは、自動的にページ上の必要なデータを検出して識別するという役立つ機能です。ポイント&クリックをする必要はなく、Octoparseは自動的に処理します。
[14.Octoparse_自動識別.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/4b26f882-1bda-5eaf-409f-d2e5274441b9.png)
 

**3.識別が完了すると、データプレビューで識別したデータを表示され、確認してから「ワークフローの生成」ボタンを押します。**
![15.Octoparse_自動識別結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/05732db6-0f6d-8cad-f5b5-61cebf68f46c.png)


**4.これで簡単にWebクローラーが作成しました！**
上の「実行」ボタンをクリックして、すぐデータを抽出できます。簡単ではないでしょうか。
![16.Octoparse_抽出結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/9ae8efbe-c530-07d0-da10-7c6e17b55bd0.png)

# 八、まとめ
Pythonでスクレイピングはそんなに簡単ではないので、学ぶ時間がなく、効率的にスクレイピングがしたい、プログラミングが苦手、或いは英語のコードばかりなので苦手意識を持っている方は[スクレイピングツール](https://www.octoparse.jp/blog/the-10-best-web-scraping-tools/)はおすすめです。

[![Octoparse_無料トライアル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/8bc62c69-2368-1105-b0a6-93a3a368b02f.png)](https://www.octoparse.jp/?utm_source=8952&utm_medium=pic&utm_campaign=qitta)



**関連記事**
[PHPで簡単なWebクローラーを作ってみた](https://www.octoparse.jp/blog/creating-a-simple-web-crawler-in-php/)
[PythonによるWebスクレイピングを解説](https://www.octoparse.jp/blog/web-scraping-using-python/)
[Python vs Octoparse！初心者向きのスクレイピング方法はどっち？](https://www.octoparse.jp/blog/web-scraping-using-python-vs-web-scraping-tool/)
[【初心者向け】ExcelとVBAでWebスクレイピング実戦！](https://www.octoparse.jp/blog/intro-to-web-scraping-with-excel-vba/)