以前、スクレイピングでホッテントリを取得する記事を書きました。
この記事に「RSSフィードの取得ならそちらでやった方がいい」という意見があったので、調べてコードを書きなおしてみました。
はてブのRSSフィード
各カテゴリーのページ末尾に.rss
を追加すればいいそうです。
「総合」のホットエントリーの場合、以下のとおりです。
http://b.hatena.ne.jp/hotentry.rss
RSSフィードを検出する機能がブラウザにある、というのも、覚えておくと役に立つかもしれません。
feedparser
RSSの解析にはfeedparserが便利そうです。
まずはパッケージをインストールします。
pip install feedparser
次にコードです。
feedparser
をimportして、RSSのURLをparseしてやります。
入ったdictionaryの中身をprint
で覗いたりドキュメントで確認したりしました。
最終的に欲しかった、はてブ、タイトル、リンクは下記の要領で取得できました。
import feedparser RSS_URL = "http://b.hatena.ne.jp/hotentry.rss" hatebu_dic = feedparser.parse(RSS_URL) for x in hatebu_dic.entries: hbm_count = x.hatena_bookmarkcount title = x.title link = x.link print(hbm_count, title, link)
結果はこんな感じです。
これなら怒られないかな?
整列してcsv出力まで行うコード
今回ははてブ総合じゃなくて、自分が興味のある分野のホットエントリーを取得してます。
import feedparser import csv # ホットエントリRSSの取得、解析 # 「総合」 RSS_URL = "http://b.hatena.ne.jp/hotentry.rss" it = "http://b.hatena.ne.jp/hotentry/it.rss" manabi = "http://b.hatena.ne.jp/hotentry/knowledge.rss" kurashi = "http://b.hatena.ne.jp/hotentry/life.rss" yononaka = "http://b.hatena.ne.jp/hotentry/social.rss" rss = [it, manabi, kurashi, yononaka] hotentry = [] # はてブ数、タイトル、リンクを格納 for n in rss: hatebu_dic = feedparser.parse(n) for x in hatebu_dic.entries: hbm_count = x.hatena_bookmarkcount title = x.title link = x.link hotentry.append((hbm_count, title, link )) # はてブ数でソート hotentry = sorted(hotentry, key=lambda x:int(x[0]), reverse=True) # 確認用に表示 for x in hotentry: print('{} || {} \n {}'.format(x[0], x[1], x[2])) # csvに出力 f = open('hatebu_rss.csv', 'w', encoding='CP932', errors='ignore') writer = csv.writer(f, lineterminator='\n') for x in hotentry: writer.writerow(x) f.close()
まとめ
beautifulsoup4を使ったものから、RSSフィード経由で情報を取得するよう修正しました。
RSSフィード経由にすべき理由、実はあんまりよく理解できていなくて、過剰なアクセスでサイトが重くなるから良くない、とかでしょうか?(前のコードも1回/dayくらいの頻度で動かす予定だったので、サイト負荷上は大したこと無いと思ったのですが。。。)
ともあれ、より良い手法があるなら、そっちの方を学ぶに越したことはありません。
今後も人に迷惑をかけない範囲で、自動情報収集に精を出していきたいですね。
参考リンク
【データサイエンスの基礎】pythonでRSSからデータ収集
この記事を参考にして、バッチリでした!
【Pythonで形態素解析】RSSから記事タイトルを取得して形態素解析をしてみた
次は形態素解析、janomeでやる予定ですが、参考に。
はてなブックマークのRSSフィードのURLと確認方法 - Sprint Life
はてブのRSSフィードを見つける参考になりました。
GitHub - kurtmckee/feedparser: Parse feeds in Python
Documentation — feedparser 5.2.0 documentation
feedparserのドキュメント。闇の設計図共有サイトへのリンクです。