大量のHTMLページを(サーバー側で)解析する必要があります。
私たちは皆、正規表現がここに行く方法ではないことに同意します。
JavaScriptがHTMLページを解析するネイティブな方法であるように思えますが、その前提は、JavaScriptがブラウザ内で持つすべてのDOM機能を持つサーバー側のコードに依存しています。
Node.jsにはその機能が組み込まれていますか?
サーバー側でHTMLを解析するこの問題へのより良いアプローチはありますか?
大量のHTMLページを(サーバー側で)解析する必要があります。
私たちは皆、正規表現がここに行く方法ではないことに同意します。
JavaScriptがHTMLページを解析するネイティブな方法であるように思えますが、その前提は、JavaScriptがブラウザ内で持つすべてのDOM機能を持つサーバー側のコードに依存しています。
Node.jsにはその機能が組み込まれていますか?
サーバー側でHTMLを解析するこの問題へのより良いアプローチはありますか?
回答:
あなたは使用することができ、NPMモジュールjsdomとhtmlparser Node.JS.でDOMを作成し、解析します
その他のオプションは次のとおりです。
これらすべてのオプションの中で、標準のW3C DOMアクセサーメソッドを使用し、クライアントとサーバーの両方でコードを再利用できるため、Node.jsオプションの使用を好みます。BeautifulSoupのメソッドがW3C domに似ているといいのですが、HTMLをXHTMLに変換してXSLTを作成することは単純にサディスティックだと思います。
Cheerioを使用します。jsdomほど厳密ではなく、スクレイピング用に最適化されています。おまけとして、すでに知っているjQueryセレクターを使用します。
❤使い慣れた構文:CheerioはコアjQueryのサブセットを実装します。Cheerioは、jQueryライブラリからすべてのDOMの不整合とブラウザーの残骸を取り除き、本当にゴージャスなAPIを明らかにします。
ϟ驚くほど高速:Cheerioは、非常にシンプルで一貫性のあるDOMモデルで動作します。その結果、解析、操作、およびレンダリングは非常に効率的です。暫定的なエンドツーエンドのベンチマークは、cheerioがJSDOMよりも約8倍速いことを示唆しています。
❁めちゃくちゃ柔軟:Cheerioは@ FB55の寛容なhtmlparserをラップします。Cheerioは、ほぼすべてのHTMLまたはXMLドキュメントを解析できます。
jsdom
そのためには遅すぎます:/
htmlparser2を使用します。その方法はより高速で非常に簡単です。この使用例を参照してください:
https://www.npmjs.org/package/htmlparser2#usage
そしてここのライブデモ:
FB55によるHtmlparser2は良い代替手段のようです。
jsdomは、実際の画面スクレイピングなどを行うには厳格すぎますが、beautifulsoupは悪いマークアップを抑制しません。
node-soupselectは、Pythonのbeautifulsoupをnodejsに移植したもので、美しく機能します