【プログラミング】Python+Selenium+PhantomJSで快適ウェブスクレイピング
最近ふと,Pythonでウェブスクレイピングしたいなと思い,
まずは入門ソーシャルデータを参考にして beautifulsoup
を使って
スクレイピングしようとしていた所,JavaScriptなどの影響を受けずに
表示されたままにスクレイピングできるやりかたが有ることを教えてもらい,
やってみました.
入門 ソーシャルデータ 第2版 ―ソーシャルウェブのデータマイニング
- 作者: Matthew A. Russell,佐藤敏紀,瀬戸口光宏,原川浩一,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/06/21
- メディア: 大型本
- この商品を含むブログ (2件) を見る
Seleniumのwebdriver, PhantomJSを使ってスクレイピングする方法です.
MacOSXへのインストール方法
MacOSXへのインストール方法は至って簡単. seleniumはpipを使ってインストールし, PhantomJSはhomebrewを使ってインストールすれば一発です.
$ pip install selenium $ brew install phantomjs # これだけ!
CentOSへのインストール方法
CentOSへのインストール方法は,基本的にseleniumがpipでインストールできるところまでは かわりませんが,yumにphantomjsが登録されていないため,基本的にはバイナリからインストール することになります. npmに登録してインストールをすることが出来ますのでその方法を. (PythonがCentOSに既にインストールされていることを前提とします.)
# seleniumのインストール $ pip install selenium #PhantomJSに必要なものをインストール $ sudo yum install gcc gcc-c++ make git openssl-devel freetype-devel fontconfig-devel rpm-build # バイナリなどを入れておくディレクトリをつくるのがよいでしょう. # 私はホームディレクトリ(~)以下にsrcというディレクトリを作っています. $ mkdir ~/src $ cd ~/src # gitのリポジトリからソースをクローン(ダウンロード) # 下の1.9は最新バージョンにしてください. $ git clone git://github.com/ariya/phantomjs.git $ cd phantomjs $ git checkout 1.9 # ソースからビルド $ ./build.sh --jobs 2 $ cd rpm/ # rpmに登録・インストール $ ./mkrpm.sh phantomjs $ sudo rpm -ivh /tmp/phantomjs-1.9.7-1.x86_64.rpm # phantomjsのバージョンを確認 $ phantomjs --version # > 1.9.xと出ればOK
準備が完了したら...
準備が完了したら,さあスクレイピングしましょう! 個人的にはipythonを使っているのでipythonバージョンで行きます. (ちなみにバージョンはPython2.7)
$ ipython In [1]: from selenium import webdriver as wd In [2]: browser = wd.PhantomJS() In [3]: browser.set_window_size(1024,768) In [4]: browser.get('http://tomohitoy.hatenablog.com/entry/2014/09/17/001815') In [5]: content = browser.page_source In [6]: browser.quit() In [7]: print content.encode('utf-8') <!DOCTYPE html><html lang="ja" data-avail-langs="ja en" data-page="entry" data-admin-domain="http://blog.hatena.ne.jp" data-static-domain="http://hatenablog.com" data-blog="tomohitoy.hatenablog.com" data-blogs-uri-base="http://tomohitoy.hatenablog.com" data-globalheader-color="b" data-globalheader-type="pc" data-author="tomohitoy" data- ...(中略)... </html>
と言った具合でさほどJavaScriptがきついサイトでない限りデータを簡単にスクレイピング出来ます. これらを解析する際には是非lxmlもしくはbeautifulsoupを使いましょう! lxmlについてはまたいつか書きます.
参考URL
NPM install PhantomJS error on centOS 6.2 - Stack Overflow
Scraping website using Python, Selenium, Lxml and PhantomJS - Borja Refoyo