web-dev-qa-db-ja.com

どのHTMLパーサーが最適ですか?

私は多くのパーサーをコーディングしています。これまで、解析とブラウザの自動化にHtmlUnitヘッドレスブラウザを使用していました。

次に、両方のタスクを分離します。

私の仕事の80%は解析のみであるため、最初にページをロードしてからソースを取得してから解析するのにHtmlUnitで多くの時間がかかるため、軽いHTMLパーサーを使用したいと思います。

どのHTMLパーサーが最適かを知りたいです。パーサーは、HtmlUnitパーサーに近い場合に優れています。


編集:

せいぜい、少なくとも次の機能が必要です。

  1. 速度
  2. 「id」または「name」または「tag type」でHtmlElementを簡単に見つけられます。

汚いHTMLコードをきれいにしないなら、私にとっては大丈夫でしょう。 HTMLソースをクリーンアップする必要はありません。 HtmlElementsを移動してデータを収集する最も簡単な方法が必要です。

185
Yatendra Goel

セルフプラグ:新しいJava HTMLパーサーをリリースしました: jsoup 。あなたが望んでいることをするだろうと思うので、私はそれをここで言及します。

そのパーティーのトリックは、要素を見つけるためのCSSセレクター構文です、例えば:

String html = "<html><head><title>First parse</title></head>"
  + "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
Elements links = doc.select("a");
Element head = doc.select("head").first();

詳細については、 Selector javadocを参照してください。

これは新しいプロジェクトなので、改善のためのアイデアは大歓迎です!

382
Jonathan Hedley

私が今まで見た中で最高のものは HtmlCleaner

HtmlCleanerは、Javaで記述されたオープンソースのHTMLパーサーです。 Webで見つかったHTMLは通常、汚れており、不正な形式であり、以降の処理には適していません。そのようなドキュメントを真剣に消費するには、まず混乱をクリーンアップし、タグ、属性、および通常のテキストに順序を付ける必要があります。指定されたHTMLドキュメントに対して、HtmlCleanerは個々の要素を並べ替え、整形式のXMLを生成します。デフォルトでは、ほとんどのWebブラウザがドキュメントオブジェクトモデルを作成するために使用する同様のルールに従います。ただし、ユーザーは、タグのフィルタリングとバランスのためにカスタムタグとルールセットを提供できます。

HtmlCleanerを使用すると、XPathを使用して任意の要素を見つけることができます。

他のHTMLパーサーについては、 this SO question を参照してください。

32
tangens

Validator.nuのパーサー をお勧めします。これは、HTML5解析アルゴリズムに基づいています。 2010-05-03からMozillaで使用されるパーサーです

9
Ms2ger