Node.jsでクロールしたページから本文のみを抽出する”readability”

スポンサーリンク

htmlから本文に当たる箇所を判別し、抽出してくれるライブラリで有名なのがこのReadabilityだが、これまでPythonで書かれたものしかないと思っていた。

けど、どうしてもNode.jsでクローラーを書きたくて、Node.jsベースのものを探してみると、普通にこのReadabilityのNode版があったので使ってみた。
https://github.com/luin/readability

現在はascrapeって名前に変更されたようです。使い方はほとんど一緒っぽい

readabilityってなに?

webページの本文にあたる箇所のみを抽出してくれるライブラリ。
ヘッダーナビとかサイドバー、関連記事、広告などなど、本文と関係ない部分を全部除いて本文だけのキレーな形にしてくれる。

例えばクローラーなどで丸ごとページのhtmlを取得してしまった時、本文以外の要らん部分がかなり混じる。
そのため、形態素解析にかけたりとか分析用のデータとして使うにはかなりノイズだらけでそのまま使える状態じゃなかったりする。

それをいちいち目で見て整形したり、正規表現でどうにかするのもめんどくさいので、readabilityのようなライブラリで綺麗にしてやる必要があるんだよね。

インストール方法

npmで下記のコマンド一発。

$ npm install node-readability

readabilityの特徴

クローラーとしての機能がついてる

Readabilityはクローラー付きなので、url渡してやるとhtml取得からやってくれる。

urlの代わりにそのままhtmlを渡すことも可能っぽいので、細かいことをしたければ、ページ取得はrequestとかcheerio-httpcliでやって、結果のhtmlを読ませるなんてこともできるようだ。(未検証)
→ただ生HTML渡すだけじゃなんかうまくいかないので、やり方わかったらまた追記します。

その他、エンコード変換や絶対パスへの変換などもやってくれる

ついでに、Githubから特徴の箇所を引用すると、

1.Supporting HTML5 tags(article, section) and Microdata API.
2.Focusing on both accuracy and performance. 4x times faster than arc90’s version.
3.Supporting encodings such as GBK and GB2312.
4.Converting relative urls to absolute for images and links automatically(Thank Guillermo Baigorria & Tom Sutton).

とのことだ。雑に訳すと以下のような感じ。

1.article, sectionなどのHTML5のタグとMicrodata APIに対応
2.正確性とパフォーマンスの両方を追求。arc90のバージョン(ベースになったプロジェクト)に比べて4倍高速。
3.GBKとかGBK2312といったエンコーディングに対応。
4.画像やリンクなどの相対パスは絶対パスに自動変換

ちなみに、クロールしたページのエンコードがutf−8以外のものであった場合、自動的にutf−8に変換されるとのこと。

使用例

結果を貼ると長いから省略するが、ほぼ正確に本文を抽出出来た。無駄なスペースとか改行もない。

注意点

・クロール間隔は最低でも1秒以上開けるようにしよう。何も考えずにfor文に突っ込むとかしないように。
・robots.txtとかでクロール拒否されてないか確認しよう。
・取得したコンテンツの権利は当たり前だがその製作者に属する。そのまま自分のサイトで公開したり、再配布可能な状態にしておくと最悪捕まるので注意。

免責事項

クローラーは色々気をつけて使用しないと、他人に大変な迷惑をかける可能性がありますので十分注意してください。
この記事見た人がなんかやらかしても一切知ったこっちゃありませんので、なんら責任、保証、その他一切の面倒ごとになんら関知するものではありません。

参考にしたもの

GitHub – luin/readability: Turn any web page into a clean view

readability-js – npm

PythonでブログのHTMLから本文抽出 2015 – orangain flavor

ABOUTこの記事をかいた人

職業:遊び人。1日の半分は睡眠時間の超ロングスリーパー。元大手IT企業のサラリーマンだったが、ブラックな労働環境で体を壊した挙句クビになり、やむをえず独立。それ以来定職にもつかず、半分遊びのようなヌルい仕事をしながら適当に暮らしている。良く言えばノマドワーカー。 詳しいプロフィールはこちら