WICの中から

機構設計者が株式投資や育児に奮闘するblog

Pythonスクレイピング再び、RSSからはてブのホットエントリーを取得

以前、スクレイピングでホッテントリを取得する記事を書きました。

temcee.hatenablog.com

この記事に「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)

結果はこんな感じです。

f:id:temcee:20180916220654p:plain

これなら怒られないかな?

整列して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のドキュメント。闇の設計図共有サイトへのリンクです。

こんな記事も書いています

temcee.hatenablog.com

temcee.hatenablog.com