はてなブックマークをスクレイピングしてホットエントリーを抽出する

はてなブックマークのウェブサイトをスクレイピングして、はてなブックマークで話題になっている記事(ホットエントリー、通称「ホッテントリ」)のタイトルとURLを抽出します。ここでホッテントリとは、はてなブックマークのトップページに掲載されているエントリーとして話を進めます。

スクレイピングに使うツールは以下のとおりです。Beautiful Soupは、HTMLやXMLをパースしてくれるPythonのライブラリです。

  • Python(2.7.5)
  • Beautiful Soup(4.4.0)

Beautiful Soupの詳しい使い方については、公式ドキュメントを参照してください。

Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation

ところで、はてなブックマークはソーシャルブックマークのひとつで、インターネットで話題になっている記事を見つけることができます。今回、はてなブックマークをスクレイピングする目的は、ソーシャルメディア上で話題になっている記事を抽出することです。

はてなブックマークは、オンラインにブックマークを保存・公開することで新しい体験ができる、ソーシャルブックマークです。はてなブックマークを利用すると、インターネットの情報をより深く理解でき、良質なページをより少ない時間で見つけられます。ブックマークすることで、知らないだれかと価値を共有するのは、すばらしいことです!

出典:はてなブックマークって? – はてなブックマーク

はてなブックマークのトップページは、こんな感じになっています。

はてなブックマーク

ソースを覗いてみると、各ホッテントリへのリンクは、こんな感じでマークアップされています。aタグの中に、class=”entry-link”、data-track-click-target=”direct”というふたつの属性が設定されています。

<a href="http://withnews.jp/article/f0160105002qq000000000000000W00o0201qq000012896A" class="entry-link" title="「おじいちゃんのノート」注文殺到孫のツイッター、奇跡生んだ偶然 - withnews(ウィズニュース)" data-entryrank="1" data-track-click-target="direct">「おじいちゃんのノート」注文殺到孫のツイッター、奇跡生んだ偶然 - withnews(ウィズニュース)</a>

class=”entry-link”、data-track-click-target=”direct”というふたつの属性を使い、Beautiful Soupのパース結果からホッテントリへのリンクを抽出します。具体的には、Beautiful Soupのオブジェクトに対してfind_allメソッドを使い、class_=”entry-link”、attrs={‘data-track-click-target’:’direct’}として絞り込みます。

# -*- coding: utf-8 -*-

import urllib2
from bs4 import BeautifulSoup

url = u"http://b.hatena.ne.jp/"
html = urllib2.urlopen(url)
soup = BeautifulSoup(html,"lxml")

# エントリーへのリンク(entry-linkクラス)を取得
# data-trace-click-target = directで絞り込み
for item in soup.find_all("a",class_="entry-link",attrs={'data-track-click-target':'direct'}):
    # リンクのタイトルを取得
    title = item.string
    if title:
        print title
    
    # リンクのURLを取得
    url = item.get("href")
    if url:
        print url

上記のコードを実行すると、こんな感じで出力されます。

「おじいちゃんのノート」注文殺到 孫のツイッター、奇跡生んだ偶然 – withnews(ウィズニュース) http://withnews.jp/article/f0160105002qq000000000000000W00o0201qq000012896A
ディープラーニングの有名ライブラリ5種を最短距離で試す半日コース(Tensor… http://d.hatena.ne.jp/shu223/20160105/1451952796
ワイがアメリカ留学して驚いたことで打線:キニ速 http://blog.livedoor.jp/kinisoku/archives/4559928.html
『魔法つかいプリキュア!』新プリキュア役のキャスト2名が判明 | アニメイトTV http://www.animate.tv/news/details.php?id=1451876975
(以下略)

10行程度のコードですが、はてなブックマークのホッテントリを綺麗に抽出してくれています。

はてなブックマークをスクレイピングするスクリプト on GitHub

はてなブックマークをスクレイピングしてホッテントリを抽出するスクリプトの最新版は、GitHub上で公開しています。このコードを使っていただいたら、ついでにGitHubのフォロー、スターをしていただけると励みになります!

はてなブックマークからホッテントリのタイトルとリンクを抽出するスクリプト on GitHub

シェアしてもらえるとうれしいです。゚(´っωc`)゚。