web-dev-qa-db-ja.com

Node.jsでHTMLページを解析する方法

大量のHTMLページを(サーバー側で)解析する必要があります。
私たちは皆、正規表現がここに行く方法ではないことに同意します。

Node.jsにはその機能が組み込まれていますか?
サーバー側でHTMLを解析するこの問題に対するより良いアプローチはありますか?

87

npm モジュール jsdom および htmlparser を使用して、Node.JSでDOMを作成および解析できます。

その他のオプションは次のとおりです。

  • BeautifulSoup Python
  • htmlからxhtml に変換してXSLTを使用できます
  • HTMLAgilityPack .NETの場合
  • CsQuery for .NET(私のお気に入り)
  • Spidermonkeyおよびrhino JSエンジンはネイティブのE4Xをサポートしています。これは、htmlをxhtmlに変換する場合にのみ有用です。

これらすべてのオプションの中で、標準のW3C DOMアクセサーメソッドを使用し、クライアントとサーバーの両方でコードを再利用できるため、Node.jsオプションを使用することを好みます。 BeautifulSoupのメソッドがW3C domにもっと似ていて、XSLTを作成するためにHTMLをXHTMLに変換するのは単なるサディスティックだと思います。

79
kzh

Cheerio を使用します。 jsdomほど厳密ではなく、スクレイピング用に最適化されています。ボーナスとして、すでに知っているjQueryセレクターを使用します。

❤おなじみの構文:CheerioはコアjQueryのサブセットを実装します。 Cheerioは、jQueryライブラリーからすべてのDOMの不整合とブラウザーの問題を取り除き、本当に豪華なAPIを明らかにします。

ϟ超高速:Cheerioは非常にシンプルで一貫性のあるDOMモデルで動作します。その結果、解析、操作、およびレンダリングは非常に効率的です。予備的なエンドツーエンドのベンチマークは、cheerioがJSDOMよりも約8倍高速であることを示唆しています。

flexible非常に柔軟:Cheerioは@ FB55の寛容なhtmlparserをラップします。 Cheerioは、ほぼすべてのHTMLまたはXMLドキュメントを解析できます。

60
Meekohi

htmlparser2を使用します。その方法はより高速で簡単です。この使用例を参照してください。

https://www.npmjs.org/package/htmlparser2#usage

そして、ここでのライブデモ:

http://demos.forbeslindesay.co.uk/htmlparser2/

7

Htmlparser2 FB55が良い選択肢のようです。

5
esp

jsdomは、実際の画面スクレイピングを行うには厳密すぎますが、beautifulsoupは悪いマークアップを止めません。

node-soupselect はpythonのbeautifulsoupをnodejsに移植したもので、美しく機能します

1
Yarek T