Pythonでスクレイピング
開発中のシステムでWEBスクレイピングの必要性があったので、Pythonを勉強中です。
Perl でも Ruby でも良かったのですが機械学習系ライブラリの豊富さと NumPy, Pandas なども揃っているので決めました。
BeautifulSoup
BeautifulSoupはHTML/XMLパーサーです。
セッション管理していないWEBサイトはこれだけで充分使えます。
環境は MacOS X 10.8.2 です。
公式からtar.gzをゲット後展開してインストールするか,
$ sudo python setup.py install
以下で直接インストールします。(すでに上で入れてました…)
$ sudo easy_install BeautifulSoup4
Searching for BeautifulSoup4
Best match: beautifulsoup4 4.1.3
Adding beautifulsoup4 4.1.3 to easy-install.pth file
mechanize
BeautifulSoupはパーサーなので認証を行うサイトの突破には不十分です。
mechanizeならセッションの保存などを自動的に行ってくれるので、認証系サイトのスクレイピングを行うことが可能です。
$ sudo easy_install mechanize
Searching for mechanize
Reading https://pypi.python.org/simple/mechanize/
Reading https://wwwsearch.sourceforge.net/mechanize/
Best match: mechanize 0.2.5
Downloading https://pypi.python.org/packages/source/m/mechanize/mechanize-0.2.5.tar.gz
Processing mechanize-0.2.5.tar.gz
Running mechanize-0.2.5/setup.py -q bdist_egg --dist-dir /tmp/easy_install-mAAKN4/mechanize-0.2.5/egg-dist-tmp-JgQmKq
Adding mechanize 0.2.5 to easy-install.pth file
mechanizeによるフォーム解析
フォームの情報を取得する例です。
br = mechanize.Browser()
br.open("https://www.google.co.jp")
print [form for form in br.forms()][0]
<f GET https://www.google.co.jp/search application/x-www-form-urlencoded
<HiddenControl(ie=Shift_JIS) (readonly)>
<HiddenControl(hl=ja) (readonly)>
<HiddenControl(source=hp) (readonly)>
<TextControl(q=)>
<SubmitControl(btnG=Google ????) (readonly)>
<SubmitControl(btnI=I'm Feeling Lucky) (readonly)>
<HiddenControl(gbv=1) (readonly)>>
HTTPメソッドと入力できる情報が取得できます。
この情報を用いてログインID, パスワードを渡すようにします。
Python2系は文字コードが混在しているのがちょっと難点。
主要なライブラリが3系に移行したらPython3に変えてもいいかもしれません。