ぴよログ

↓に移転したのでこっちは更新されません、多分。

ウェブサイトやブログ記事中の本文を抽出するgem

移転しました →

大元はこちらで、

Webページの本文抽出 (nakatani @ cybozu labs)Webページの本文抽出 (nakatani @ cybozu labs)はてなブックマーク - Webページの本文抽出 (nakatani @ cybozu labs)

Ruby1.9対応され、gemになったものがこちら。

mono0x/extractcontent

Bundlerを使ってリポジトリ指定でインストールできます。

gem 'extractcontent', :git => 'https://github.com/mono0x/extractcontent.git'

使い方

html = open(url).read
body, title = ExtractContent.analyse(html)

これだけでタイトルと本文を持ってきてくれます。精度も悪くなさそう。

HTMLタグを残したい

純粋に文章のみを残すという作りになっているため、抽出された本文からはHTMLタグがなくなっています。画像も無くなってしまいます。

少し話がそれますが、この本文抽出の機能を使って、「あとで読む」つもりの記事の本文を1ファイルのHTMLにまとめて、それをPDFやepubにしてKindleで読むというハックをやりたいなと思っています。

そのためには本文はHTMLのままでなければいけません。見出しや画像、箇条書きなどはしっかり残っていて欲しいのです。そういうわけで、この部分に少し手を入れます。

extractcontent/lib/extractcontent.rb at master · mono0x/extractcontent

def self.analyse(html, opt=nil)
  # ...
  
  # 変更前
  [strip_tags(body[0], dom_separator), title]

  # 変更後
  [body[0], title]
end

タグを除去するメソッドを呼ばなければいいわけですね。

これで本文HTMLを抽出する準備ができました。スクリプトはまだ途中です。