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の生成や、その他色々できるはずです。便利なライブラリなので、一度使ってみてください