【Python】Webスクレイピング入門・ライブラリ比較

Pythonを用いたWebスクレイピングと便利なライブラリの比較について入門者向けにまとめました。

Webスクレイピングとは

Webスクレイピングとは、Webサイトから情報を抽出することです。
例えば、あるサイトに掲載している画像を自動でダウンロードしたりすることです。
Pythonでは、Webスクレイピングを簡単に行えるライブラリが豊富です。
また、最近は機械学習ブームにより、機械学習に必要な大量のデータをネット上で集めるためにWebスクレイピングが利用されたりしています。

Webスクレイピングの主要ライブラリ

Webスクレイピングの主要Pythonライブラリを下記に整理しました。

ライブラリ名 概要
urllib ■Python標準ライブラリ(必須)
■「Webサイトへのアクセス」「HTMLファイルの取得」などを行えるライブラリ
■HTMLパースの機能はないため、urllibでHTMLを取得して、他のライブラリでHTMLから欲しいデータを抽出するという使い方が多い。
asyncio ■Python標準ライブラリ(3.4~)
■「Webサイトへのアクセス」「HTMLファイルの取得」を非同期で行えるため、多数のWebサイトを高速にクロール可能。
html.parser ■Python標準ライブラリ(必須)
■HTMLをパースできる(HTML解析して欲しい情報を抽出)
■標準ラブラリなので手軽に扱えるが機能が少なく処理も遅い
lxml ■XML/HTMLパース可能
BeautifulSoup4 ■Pythonの定番HTMLパースライブラリ
■内部でlxmlが動いている
PyQuery ■HTMLパース可能(Python版JQuery)
■JQueryを使っている人にはとっつきやすい
Feedparser ■フィード(RSS)パース
Mechanize ■スクレイピング(Perl定番ライブラリ:MechanizeのPython版)
Selenium ■Webブラウザを自動操作できるライブラリ
■アクセスしたサイトのボタンを自動で押したりできる

よくある使い方としては下記のような組み合わせ方です。
①Webページへアクセスし、HTMLを取得:urllib
②取得したHTMLからデータを抽出:BeautifulSoup4、PyQueryなど
③Webページの自動操作:Seleniumなど

Webスクレイピングを行う際の注意

説明
1 robots.txt」「robots metaタグ」「HTTPヘッダーのX-Robots-Tag」に記載されているルールに従ってアクセスする。
2 HTMLに「Pragma:No-cache」があればアクセスしない。
3 rel=”nofollow”があるaタグのリンク先はクロールしない。
4 サーバにアクセスする間隔時間を開けて高負荷をかけないようにする。(最低1秒以上?)
5 アクセスする時のUser-agentは正しく設定する。(偽装しない)
6 その他、サイトに記載されている利用規約等に従う。

※詳細:【Webスクレイピング】注意事項とルール
※参考:著作権法第30条・著作権法第47条(6,7)

関連ページ、その他
関連 【Python/BeautifulSoup4】Webスクレイピング入門Python入門 基本文法【Python】ネットワークプログラミング入門
情報収集 Qiita(Beautiful Soup関連記事一覧)
関連記事