大元はこちらで、

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

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

mono0x/extractcontent

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

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

使い方

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

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

HTMLタグを残したい

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

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

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

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

1def self.analyse(html, opt=nil)
2  # ...
3
4  # 変更前
5  [strip_tags(body[0], dom_separator), title]
6
7  # 変更後
8  [body[0], title]
9end

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

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