JSで動的にDOMを生成するページをPythonで開く

動機
とあるサイトをスクレイピングしようと思い、おもむろにurllib2を使って下記のように開いてみたところ
明らかに中身のDOMの量が少なかったのです。

import urllib2
response = urllib2.urlopen("http://test.com")
response.read() # 確認すると中身が少ない。悲しい

実際のサイトのソースを覗くと、明らかにurllib2で返ってきたレスポンスと異なっていました。
これはjsでDOMを動的に生成してアップエンドしてるパターンのやつですね。
ということで、Pythonでそういったコンテンツを開く時は
ghost.py
これを使います。

インストール
インストールするにはPySlideかPyQtが必要でさらにこの二つを入れるためには
cmakeとgmakeが必要になります。

Macに入れる場合、brewとpipで簡単に入ります。

brew install cmake
brew install qmake
brew install qt4
pip install PySide
pip install Ghost.py

CentOS6.6でも入れました。

yum install cmake
yum install --enablerepo=atrpms-testing qt47-webkit-devel
yum install libxcb libxcb-devel xcb-util xcb-util-devel
yum install flex bison gperf libicu-devel libxslt-devel ruby
yum install libXrender-devel
wget http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.tar.gz
yum install libX11-devel mesa-libGL-devel perl-Time-HiRes libxext-dev
tar xzvf qt-everywhere-opensource-src-4.8.6.tar.gz
cd qt-everywhere-opensource-src-4.8.6
./configure
gmake
qmake install
ln -s /usr/local/Trolltech/Qt-4.8.6/bin/qmake /usr/bin/qmake
pip install PySide
pip install Ghost.py

こんな感じ。qmake installでめちゃくちゃ時間かかりました。

使い方

こんな感じですぐに使えます。

from ghost import Ghost
ghost = Ghost()
page, resources = ghost.open("http://www.thisav.com/")
page.content #これで、HTMLが取得出来る。