大元はこちらで、
Webページの本文抽出 (nakatani @ cybozu labs)
Ruby1.9対応され、gemになったものがこちら。
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を抽出する準備ができました。スクリプトはまだ途中です。