Pythonメモ:なぜscrapyとseleniumを使うのか

2018年10月28日

PCの写真

プログラミングを始めるにはとりあえず言葉の整理から

ホームページからデータを自動収集するということ
~スクレイピングとrequestsとパーサー~

ホームページからプログラムで自動的にデータを収集する行為をスクレイピングと言う。
pythonでスクレイピングを行う場合、標準ライブラリであるrequestsを使えばホームページのデータを取得することが可能である。
しかし、それだけでは目的とするデータを効率的に手に入れることは出来ない。
例えばホームページのタイトルやリンク先のアドレスを入手する場合、目的のタグを検索し、対応する情報のみを抜き出すことが必要となってくる。
これを行うためにはpythonの標準メソッドであるfindや標準ライブラリのreとresearchメソッドを使用することも考えられるが、手間がかかる。
目的のタグを探し出し、対応する情報のみを抜き出すにはパーサーと言われるライブラリが便利だ。
パーサーとは文章を解析するプログラムのことである。
beautifulsoupライブラリなどが有名である。
これらを使えば、特定のホームページから情報を抜き出すとともに、そこからリンクの貼られているページを辿り、その先でも情報を収集していくということも可能である。
この複数のホームページを巡回して情報を収集する行為をクローリングという。

requestsの限界とヘッドレスブラウザー

ここまでで述べたのは主にサーバー側で情報が処理され、閲覧者側PCブラウザでそのデータをそのまま閲覧するようなホームページをスクレイピングする場合である。
これに対して閲覧者側PCのブラウザで多様な処理が行われるような動的なホームページではrequesutsでは役不足である。近年は特にこの動的なホームページが多い。某検索サイトなどはその例である。
requestsはサーバーにデータを要求するものであり、ブラウザで行われる処理についてはフォローしない。
そこで、動的なホームページをスクレイピングする場合はヘッドレスブラウザーを使う必要が出てくる。
ヘッドレスブラウザーとは私たちが従来使っているブラウザーから画面表示機能を取り除いたものであり、プログラムから使用することを目的とされているものである。
chromeもヘッドレスブラウザーを用意している。

ヘッドレスブラウザーを使ったスクレイピングにはseleniumやsplashといったライブラリを使う。
※splashはライブラリというよりdockerイメージでサーバーとしての利用
これらのライブラリを使えば、ページを取得してくるだけでなく、ブラウザーのようにボタン等の操作をプログラムで行うことも可能となっている。

クローリングならscrapy. でもseleniumも使う

seleniumを使うことでスクレイピングをすることが可能だが、本格的に様々なホームページから情報を収集するにはscrapyというフレームワークを利用したほうが効率的である。
尚、scrapyにはヘッドレスブラウザーを操作する機能は無いのでseleniumを内部で使う。