Python基本的なスクレイピングライブラリ
Web上から自動的にデータを取得できたら便利ですよね。 それを実現してくれるのが、スクレイピング・クローリングという技術です。 私自身、プログラマになる前は小売店の販売データ分析を行っていたのですが、POSデータをWebから落としてExcelでこねくり回して販売予測をするといったことを行っていました。 1日30分程度の作業でも、年間にしたら0.5時間×20日×12ヶ月= 120時間 の時間を費やしていることになります。
Web上から自動的にデータを取得できたら便利ですよね。 それを実現してくれるのが、スクレイピング・クローリングという技術です。 私自身、プログラマになる前は小売店の販売データ分析を行っていたのですが、POSデータをWebから落としてExcelでこねくり回して販売予測をするといったことを行っていました。 1日30分程度の作業でも、年間にしたら0.5時間×20日×12ヶ月= 120時間 の時間を費やしていることになります。
Web上から自動的にデータを取得できたら便利ですよね。
それを実現してくれるのが、スクレイピング・クローリングという技術です。
私自身、プログラマになる前は小売店の販売データ分析を行っていたのですが、POSデータをWebから落としてExcelでこねくり回して販売予測をするといったことを行っていました。
1日30分程度の作業でも、年間にしたら0.5時間×20日×12ヶ月=120時間の時間を費やしていることになります。
プログラミングを使えばこの作業を比較的簡単に自動化できる上、Pythonの優れたライブラリを使えば、Excel以上の分析手法や機械学習にもスムーズに移行することができます。
今回は基礎として基本的な5つのPythonのスクレイピングライブラリの概要・使いどころなどを解説していきたいと思います。
この5つのライブラリを使いこなすことができれば、大半のスクレイピング・クローリング手法は実現することができます。
URLを指定してHTMLを取得できるライブラリです。HTMLを取得する以外にも、REST APIサーバにリクエストを送ることができます。
ここで取得したHTMLタグ・CSSに対して、パース(構文解析)を行うことでWebから情報を抜き出したり、加工したりすることができます。
aタグのhref情報を取得し再度そのURLにリクエストを行うことで、あたかもページ遷移しているかのような挙動をさせることができます。
Requestで取得したHTMLデータから必要なデータを抽出できるライブラリです。
HTMLのdivタグ、aタグ、CSSのclass、nameなどを指定して、大量のHTMLデータ郡の中から必要なデータのみ絞り込むことができます。
とてもシンプルで使いやすいライブラリですが、速度が遅い、xpathが使えないなどの欠点があります。
こちらもBeautiful soupと同じ構文解析ライブラリですが、裏でC++が動いているため非常に高速に処理を行うことができます。
またxpathの指定も行うことができるため、より柔軟にスクレイピングを行うことができます。
ただし、C++のライブラリに依存しているため、使用しているOSにC++のライブラリが導入されていないとエラーになってしまったりと、Beautiful soupよりは導入に癖があるのが難点です。
Scrapyは正確にはライブラリではなくクローラーフレームワークです。DjangoやFraskに近いものといった認識で問題ありません。
Scrapyを導入してプロジェクトを作成するとscrapy.cfg、crawl.py、items.py、middlewares.py、pipelines.py、settings.py、spiders/が自動で生成されこれらのファイルを編集することでクローラーをスムーズに作成することができます。
spiderディレクトリにファイルを追加していくことで、様々なクローラを作成することができます。
また、次で解説するSeleniumもクローラーに組み込むことができるため、うまく使えばどんなWebサイトでもクローリングすることができます。
(2段階認証があるサイトなどセキュリティが厳しいサイトは難しいかもしれませんが…)
Seleniumは他のライブラリとは毛色が違います。
他のライブラリがHTMLを取得し、その構文を解析してスクレイピングを行うのに対して、Seleniumはブラウザを直接操作し「クリック」や「入力」などの動作をコードで行うことができます。
そのためChrome driverなどブラウザのドライバが必要になります。人が操作しているのと変わらない動作をするため、HTMLを取得できないサイト(たとえば、全面Javascriptで構成されているSPAサイト)などのスクレイピングも行うことができます。
ただし、Seleniumの欠点として、直接ブラウザを操作しているためDOMの表示が遅いとSelenium側でDOMを認識できずにエラーになってしまいます。
レスポンスが遅そうなログインなどの認証を操作に挟みこみたい場合は十分にwaitで時間間隔を設ける必要があります。
欠点はあるものの、Seleniumを動かして自動でブラウジングされていく様は壮観です。是非試してみてください。
ちなみにPython以外のプログラミング言語でも使うことができます。