どのHTMLパーサーが最適ですか?[閉まっている]


194

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

ここで、両方のタスクを分離したいと思います。

私の作業の80%は解析のみを含むため、HtmlUnitで最初にページをロードしてからソースを取得して解析するのに時間がかかるため、軽量のHTMLパーサーを使用したいと考えています。

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


編集:

せいぜい、私は少なくとも以下の機能が欲しいです:

  1. 速度
  2. 「id」、「name」、「tag type」でHtmlElementを見つけやすくなります。

汚れたHTMLコードをクリーンアップしないのであれば、私には問題ありません。HTMLソースをクリーンアップする必要はありません。HtmlElement間を移動してデータを収集する最も簡単な方法が必要です。


2
「最高」とはどういう意味ですか?スピード、現在の実装からの移行のしやすさ、W3C標準の順守など、私が考えていなかったことを意味しますか?あなたの質問はスピードを意味しますが、開発の移行時間も意味します。いくつかの明確化はあなたのニーズによりよく適合する良いパーサーを推奨する際に他の人を助けるかもしれません。
aperkins 2010年

2
「私は多くのパーサーをコード化している」というあなたの発言は、質問と一致していないようです。「htmlパーサーをたくさん使用する必要がある」という意味ですか?
空白

11
この質問は、「建設的でない」近い理由から免除されるのに十分具体的だと思います。
トカゲに請求

9
これを再度開くには投票してください。これは十分に具体的であり、閉じられるべきではありません。
AZ_ 2013年

3
ええ、SOの一部の人々は、「最高の」質問の聖なる戦争と聖戦を戦っています。とても迷惑。回答の投票は、この質問の有用性を明確に示しています。
user1050755

回答:


396

セルフプラグイン:新しい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();

詳細については、セレクターの javadocを参照してください。

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


15
これは素晴らしく、CSSセレクターのサポートが大好きです。私がJavaライブラリを使用していることはほとんどわかりません。:-)
ウィリアムピエトリ

17
これをサポートするのをやめないでください。これは、サーバー側のJavaを使用してHTMLを解析するために必要なものです。これはすごい!数時間でプロキシを構築し、すべてのsrcリンクとhrefリンクを変更して、オリジンサーバーへのフルパスを作成しました。
jmort253 '14年

7
ちらっと見たところです。私はそのインターフェースとドキュメントが好きです。わかりやすいです。:)
emeraldhieu '19

5
良くやった!jsoupを起動して10分未満で実行しました。
IndrekKõue、2011

10
信じられない、これはすごい病気です。HTMLページを数分で処理できました。この素晴らしい仕事をありがとう。
Michael-O

32

これまでに見た中で最高のものはHtmlCleanerです:

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

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

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


1
プロキシを自分で処理してから、代わりにHtmlCleanerを使用してストリームを処理する必要があります。=>便利ではありません。T__T
kidnan1991

ここではHTMLTidyの方が良いオプションではないでしょうか? html-tidy.org
Troy Witthoeft

1
Similar rules that the most of web browsers use -これはあまり説得力がありません
pguardiario 2017

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.