JQueryの様にDOM操作できるpyqueryを使って、占い@niftyをスクレイピングする

会社の先輩にブログ書けと言われたので、トハエコ(@tohae_call)のソースを小出していこうと思います。
今回はJavascriptのライブラリとして有名なJQueryの様にDOM操作できる、pyqueryというライブラリの使い方を紹介します。クローラとかスクレイピングとかって、まぁ日常茶飯事だと思うのですが、その時に役立つのがこのpyqueryです。僕は最近これ無しではクロールできません。

インストール

pyquery自体のインストールは簡単で、easy_installでちゃちゃっと入ります。

$ easy_install pyquery

ただし、pyqueryはlxmlを利用するので、環境によってはlxmlが入らないと怒られるかもしれません。lxmlはCで書かれてるので、Windowsの場合だとかなりめんどくさいです。CentOSに入れる場合は、CentOS5にpython2.6+Django+mod_python+色々の環境を整える - とはえ領域を見てください

使い方

とにもかくにもソース見た方が早い。
以下のプログラムは、山羊座(やぎ座) 12星座で占う!今日の運勢 占い@niftyから、「点数」「ラッキーカラー」「総合運」「恋愛運」を取得するものです。

from pyquery import PyQuery as pq

uranai_url = "http://uranai.nifty.com/app/f12seiza/yagi.htm"
d = pq(uranai_url)
point = d(".hako").html()
midashi = d(".pad_5 p").html().split(u"")[0]
rennaiun = d(".right p:eq(0)").html()
lucky_color = d(".hako2 p").html()
lucky_item = d(".hako4 p").html()
print"総合運は%s、%s。%s%sの%sを持つと良いでしょう。 %s" % (point,midashi,rennaiun,lucky_color,lucky_item,uranai_url)

urlを引数にしてPyQueryオブジェクトを作成すると、JQueryの様にCSSセレクタなんかで、各要素や属性にアクセスすることができます。JQueryを知っていれば、新しい文法とかを覚える必要がないので便利ですね!

point = d(".hako").html()

これは、class="hako"な要素の中身を取得しますし

rennaiun = d(".right p:eq(0)").html()

これならclass="right"な要素の、1番目のpタグの要素の中身を取得します。
ね?簡単でしょ?

今回のようにスクレイピングしかしない場合は、要素や属性の取得ができれば十分ですが、pyqueryにはDOMの生成や、その他色々できるはずです。便利なライブラリなので、一度使ってみてください