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が必要になります。
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が取得出来る。