6行のコードで Yahoo! Japan のトピックス一覧を取得する Python スクリプト

元ネタはこちら。

ちょうど Scrapemark を使ってちょこちょことしていたところなので試しにやってみました。
Scrapemark は正規表現を使って簡単に web スクレイピングを行うための python ライブラリです。

コードは以下の通りです。コメント行と空行を除くと全部で6行になります。

import scrapemark

# urlを指定する
url = 'http://www.yahoo.co.jp'

# IE8のフリをする
scrapemark.user_agent = 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)'

#  Scrapemark を使ってサイトにアクセスし、該当するテキストをリストとして取得する
topix = scrapemark.scrape("""<div id='topicsfb'>{* <li><a>{{ [] }}</a> *}""", url=url)

# 出力する
for topic in topix:
    print topic

出力結果

菅新首相 就任会見始まる
郵政成立で合意 民主・国民
ジョンウン氏の新写真公開
遺言書キットのヒットを分析
夏目前 あせもの注意と対策は
MLB全体1位指名は17歳強打者
W杯日本代表にブブゼラの洗礼
神田うの 別居報道に反論
今日の話題(31件)
一覧

ちなみに以下の様に書くと3行で収まりました。

import scrapemark
for topic in scrapemark.scrape("""<div id='topicsfb'>{* <li><a>{{ [] }}</a> *}""", url='http://www.yahoo.co.jp', headers={'User-agent':'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)'}):
    print topic

ついでにリンク先の URL も一緒に辞書のリスト([{'title':u'***', 'url':u'***'}, {'title': ...}])として取得してみました。

topix = scrapemark.scrape("""<div id='topicsfb'>{* <li><a href="{{ [].url }}">{{ [].title }}</a> *}""", url=url)
for topic in topix:
    print '%s\n%s\n' % (topic['title'], topic['url'])
新首相会見 参院勝敗は50議席
f/topics/top/1/*-http://dailynews.yahoo.co.jp/fc/domestic/kan_cabinet/?1275984123

郵政成立で合意 民主・国民
f/topics/top/2/*-http://dailynews.yahoo.co.jp/fc/domestic/postal_privatisation/?1275983132

ジョンウン氏の新写真公開
f/topics/top/3/*-http://dailynews.yahoo.co.jp/fc/world/kim_jong_il/?1275983132

無煙タバコ品薄 想定外ヒット
f/topics/top/4/*-http://dailynews.yahoo.co.jp/fc/domestic/smoking/?1275987142

街路樹の虫が不快 苦情増える
f/topics/top/5/*-http://dailynews.yahoo.co.jp/fc/domestic/living_environment/?1275987142

カカーが1年ぶりの代表ゴール
f/topics/top/6/*-http://dailynews.yahoo.co.jp/fc/sports/fifa_world_cup_group_g/?1275987142

W杯日本代表にブブゼラの洗礼
f/topics/top/7/*-http://dailynews.yahoo.co.jp/fc/sports/soccer_national_team/?1275981336

神田うの 別居報道に反論
f/topics/top/8/*-http://dailynews.yahoo.co.jp/fc/entertainment/wide_show/?1275976883

今日の話題(34件)
f/topics/top/11/*-http://backnumber.dailynews.yahoo.co.jp/?t=d&d=20100608&c=top

一覧
r/ttl

以上の様に Scrapemark を使うとソースの html ほぼそのままのわかりやすい指定で内容を取得できます。
特定の1部分だけを取得することは勿論、上記の様に繰り返し部分をリストや辞書で取得することや、文書中の URL からリンク先の内容を取得する事も可能です。

詳しくは Scrapemark - Documentation をご覧下さい。分量も多くありませんし、例示も多いので分かりやすいと思います。