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 をご覧下さい。分量も多くありませんし、例示も多いので分かりやすいと思います。