機械語と数学とことば

更新が進みません.

【プログラミング】Python+Selenium+PhantomJSで快適ウェブスクレイピング

最近ふと,Pythonでウェブスクレイピングしたいなと思い, まずは入門ソーシャルデータを参考にして beautifulsoupを使って スクレイピングしようとしていた所,JavaScriptなどの影響を受けずに 表示されたままにスクレイピングできるやりかたが有ることを教えてもらい, やってみました.

入門 ソーシャルデータ 第2版 ―ソーシャルウェブのデータマイニング

入門 ソーシャルデータ 第2版 ―ソーシャルウェブのデータマイニング

Seleniumのwebdriver, PhantomJSを使ってスクレイピングする方法です.

MacOSXへのインストール方法

MacOSXへのインストール方法は至って簡単. seleniumはpipを使ってインストールし, PhantomJSはhomebrewを使ってインストールすれば一発です.

$ pip install selenium
$ brew install phantomjs
# これだけ!

CentOSへのインストール方法

CentOSへのインストール方法は,基本的にseleniumがpipでインストールできるところまでは かわりませんが,yumにphantomjsが登録されていないため,基本的にはバイナリからインストール することになります. npmに登録してインストールをすることが出来ますのでその方法を. (PythonCentOSに既にインストールされていることを前提とします.)

# 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