2011-11-02 16 views
158

nodejsにRubyのnokogiriのようなものがありますか? 私は使いやすいHTMLパーサーを意味します。Node.jsのHTMLパーサー

私はNode.jsモジュールのページでいくつかのパーサを見たことがありますが、私はきれいで新鮮なものを見つけることができません。

+3

何を意味するのですか? NokogiriのXPathやCSSセレクタサポートのように、ノードを選択して作業するのに便利ですか?無効な「タグスープ」HTMLを解析することができますか? – Phrogz

+0

jQueryに慣れている場合は、[この回答](http://stackoverflow.com/a/31361044/778272)を検討してください。 –

+1

なぜあなたはいつも話題になったり、受け入れられないようなことを何かを評価しますか?これは正当な質問をした本当の人です。あなたは先に進み、それを閉じなければなりませんでした。それはあなたに何か重要なものか何かを感じさせますか? –

答えて

389

DOMをビルドする場合は、jsdomを使用できます。

cheerioもありますが、これはjQueryインターフェイスを持ち、最近のjsdomのバージョンよりもはるかに高速ですが、最近はパフォーマンスが似ています。

ストリーミングパーサーであるhtmlparser2を参照してください。ベンチマークによれば、他のものより速く、デフォルトではDOMがないようです。また、DOMを生成するハンドラとバンドルされているため、DOMを生成することもできます。これはcheerioによって使用されるパーサーです。

parse5も良い解決策のようです。 WHATWGに準拠しており、jsdomAngular、およびPolymerで使用されています(このアップデートの最終コミット以降11日間)。

web scrapingのHTMLを解析する場合は、YQLを使用できます。それにはnode moduleがあります。 YQL私はあなたのHTMLがstaticウェブサイトからのものであれば、自分のコードや処理能力ではなく、サービスに頼っているので、最高の解決策になると思います。ウェブサイトのrobot.txtによってページが許可されていないとうまくいかないことに注意してください.YQLはそれに対応していません。

掻き取ろうとしているウェブサイトがdynamicの場合はphantomjsのようにheadless browserを使用してください。あなたがファントムを考えているなら、casperjsも見てください。そして、あなたはSpookyJSとノードからcasperjsを制御することができます。

ファントムズの隣には、zombiejsがあります。 nodejsに埋め込まれないphantomjsとは異なり、zombiejsは単なるノードモジュールです。

後者のソリューションにはnettuts+ toturialがあります。

+12

非常に完全な答えです。良くやった。 –

+1

DomHandlerモジュール(htmlparser2にバンドルされています)を使用してhtmlparser2からDOMを取得できます。それらは、DOMを作成するオーバーヘッドなしに、他の種類のHTML処理を可能にする目的で分離されています。 – esp

+0

@ espありがとう、私はそれが非標準のDOMだと思う前に、私はそれに応じてセクションを変更しました。 –

17

更新:cheerioおそらくあなたの最善の策です。

Node.ioはかなり包括的な掻き取りツールです。

+4

Node.ioはもはや維持されておらず、彼の著者は[cheerio](https://github.com/MatthewMueller/cheerio)の使用を推奨しています。 –

+0

ありがとう、答えを更新する。 – Will

関連する問題