Make it possible with Python.

最近Pythonから離れ気味、その他物作りに寄り気味です。

RaspberryPiと Pythonスクレイピング前下調べ結果

Raspberrypiでスクレイピングを仕様としたときの記録。

パーサはlxmlを使う

Pythonでhtmlを取り扱う際は、「htmllib(標準モジュール)」や 「Beautiful Soup」 といったモジュールがあります。 しかし、高速で柔軟な操作がしたい場合は、 「lxml」がいい

Gentleちゃれんじ Tips -lxmlでhtmlを処理する-

lxmlはC言語で書かれているので高速だそうです。

Xpathで要素を指定する

Xpathは、CSSSelectorより高度な表現が可能

十章第一回 XPathとは — JavaScript初級者から中級者になろう — uhyohyo.net

どうせ覚えるなら、ということで。

Javascript使用ページを取得するにはSelenium+PhantomJS

JavascriptでのSingle Page Application(SPA)になっていると、htmlを取得するだけだと、コンテンツが読み込まれない。

その際、Selenium+PhantomJS でブラウザをもした読み込みを行う。

PhantomJSはWebkitベースのブラウザ。画面描画がないので通常のブラウザよりは高速、軽量。

Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド-

Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド-

この教科書から引用。

ここで1つ問題。seleniumは pipでraspberrypiでもインストールできたが、PhantomJSはインストールできない・・・。

(試しに pip install phantomjs と打ってみたら、RasPiが固まって数時間放置したら、何も動かなくなってしまった・・・)

上記参考書には、Ubuntu向けに公式のbitbucketからVer.1.9.8のバイナリを持ってくる方法が書いてあるけど、同じ流れですすめても、RaspberryPiでは動かなかった。

入力

 $ wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.8-linux-x86_64.tar.bz2
 $ tar xvf phantomjs-1.9.8-linux-x86_64.tar.bz2
 $ sudo cp phantomjs-1.9.8-linux-x86_64/bin/phantomjs /usr/local/bin/
 $ sudo apt-get install -y libfontconfig1 fonts-migmix

出力

-bash: /usr/local/bin/phantomjs: cannot execute binary file: 実行形式エラー

RaspberryPiはARM CPUだからかな。ということで、ARM向けのバイナリを持っている人を探した結果、このページを発見。

RaspberryPiにPhantomJSをインストールする - uepon日々の備忘録

このページの、以下の部分をもらった。

$ git clone https://github.com/mecrazy/phantomjs-binaries.git
$ chmod 755 phantomjs-2.1.1-linux-armhf

上の教科書に沿って初めに作ったX86_64向けのバイナリを削除して、

$ sudo rm /usr/local/bin/phantomjs

gitから持ってきたバイナリをコピーして(バイナリをリンクじゃなくてそのままコピーするのは、問題ないんだろうか。)

$ sudo cp phantomjs-binaries/bin/phantomjs-2.1.1-linux-armhf /usr/local/bin/

名前を変えたら、

$ sudo mv /usr/local/bin/phantomjs-2.1.1-linux-armhf /usr/local/bin/phantomjs
$ phantomjs --version
2.1.1

正しくバージョンを返してくれるようになった。

教科書とはバージョンは違うが、今後、問題なく動くだろうか。

もう眠いので今日は寝ます。。

※正解がわかるまで微妙に不要なコマンドをいろいろ打っているので、この流れだけで成功するかは不確実です。