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