Html Agility Pack は依然として最高の .NET HTML パーサーですか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/1065031

質問

HTML アジリティ パック に対する答えとして与えられた StackOverflow の質問 少し前ですが、今でもそれが最良の選択肢ですか?他にどのようなオプションを考慮する必要がありますか?もっと軽いものはないでしょうか?

役に立ちましたか?

解決

があります スプレッドシート 比較とともに。

要約すれば:

CsQuery のパフォーマンスとHTMLアジリティパックとフィズラー私は、いくつかのパフォーマンステストをまとめて、CSqueryを私が知っている唯一の実用的な代替手段(Fizzler、HTMLagilityPack拡張機能)と比較しました。3つの異なるドキュメントに対してテストしました。

  • シズルテストドキュメント(約11k)
  • ウィキペディアの「チーズ」の項目 (約 170k)
  • シングルページの HTML 5 仕様 (約 6 メガバイト)

全体的な結果は次のとおりです。

  • HAP は、HTML の文字列をオブジェクト モデルにロードする際に高速です。これは理にかなっているので、Fizzlerはインデックスを構築しないと思います(または おそらく、比較的単純なものしか構築しません)。CsQuery は ドキュメントを読み込むのに1.1〜2.6倍長くなります。詳しくはこちら 以下に。
  • 他のほとんどすべての場合、CsQuery の方が高速です。場合によっては 10,000 倍以上になることもあります。唯一の例外は "*" セレクタで、 フィズラーの方が速い場合もあります。すべてのテストで、結果は完全に 列挙;この場合、ツリー内のすべてのノードが 列挙。したがって、これは選択エンジンをテストしませんが、 データ構造。
  • CsQuery は、ブラウザーと同じ結果を返すという点で優れたパフォーマンスを発揮しました。ここにある各セレクタは、 ChromeはjQuery 1.7.2を使用しており、数値は CsQuery です。これはおそらく、HtmlAgilityPack がオプションの (欠落している)タグを異なる方法でタグ付けします。また、n番目の子は実装されていません 完全にFizzlerでは、単純な値のみをサポートします(数式はサポートしません)。

他のヒント

これはHTMLのパースに来るとき、本物への比較はありません。これはvalidator.nu のパーサの C#のポートです。これは、Geckoベースのブラウザ(例えばFirefoxの)によって使用される同じコードベースです。そこレポは少し埃っぽい見えますが、だまされてはいけません。..ポートが顕著です。それだけで見過ごされています。私は1ヶ月前 CsQuery の中にそれを統合しました。それは(jQueryのの大部分を含むとC#に移植試験をシズル)全てCsQueryテストに合格します。

私はC#で書かれた他のHTML5パーサの認識していないよ、または、欠けているという点では良い仕事をやって近くに、オプション、および無効なタグハンドリングリモートで来ることも、任意の。これはちょうどかかわらず、素晴らしい仕事をしない - それは標準に準拠します。

Iは上記にリンクされたリポジトリは、それは、XMLノードツリーを生成する基本的なラッパーを含む、元のポートです。 CsQueryバージョン1.3以降は、このパーサを使用します。

もあります 角度鋭い

AngleSharp は、HTML、SVG、MathML などの山かっこベースのハイパーテキストを解析できるようにする .NET ライブラリです。検証のない XML もライブラリでサポートされています。AngleSharp の重要な点は、CSS も解析できることです。パーサーは、公式の W3C 仕様に基づいて構築されています。これにより、指定されたソース コードの完全に移植可能な HTML5 DOM 表現が生成されます。また、querySelector や querySelectorAll などの現在の機能もツリー トラバーサルに機能します。

HTML Agility Pack は、少し前に StackOverflow の質問に対する回答として提供されました。

Html Agility Pack は、HTML を解析するための優れたソリューションです。

まだですか 最高 オプション?

最高?まあ、それはすべて当面のタスク次第ですが、一般的にはそう思います。場合によっては理想に達しないこともありますが、通常は素晴らしい仕事をします。

もっと軽いものはないでしょうか?

これを試してみてはいかがでしょうか: http://csharptest.net/browse/src/Library/Html/これは、Regex を介して HTML/XML を分解する、ほんの一握りのソース ファイルにすぎません。軽量の DOM と XPath はサポートされていますが、それ以外はあまりサポートされていません。(ヘルプコンテンツ)

[例]

public void TestParse() {
        string notxml = "<html id=a ><body foo='bar' bar=\"foo\" />";
        var html = new HtmlLightDocument(notxml).Root;

        Assert.AreEqual("html", html.TagName);
        Assert.AreEqual(1, html.Attributes.Count);
        Assert.AreEqual("a", html.Attributes["id"]);
        Assert.AreEqual(1, html.Children.Count);
}

あるいは、DOM ツリーを構築する代わりにパーサーを直接使用することもできます。実装するだけです IXmlLightReader インターフェイスを呼び出し、静的メソッドを呼び出します。 XmlLightParser.Parse 方法。

追伸:これは社内の議論を解決するために書かれたものです。その正規表現 できる HTMLを解析してみよう!それ以来、どこにでも埋め込むことができるほど軽量であるため、実際に多くの用途が見つかりました。DOM 階層ビルダーを混乱させる方法はまだありますが、パーサーが処理できない HTML は見つかりませんでした。

私はこの前に、かなり簡単に流れAPIを使用していました。私はC#/。Netのドメインで、これは非常に良い選択だと思います。

ここのJavaライブラリがあります。私は個人的な経験を持っていないにもかかわらず、なかなか良さそうです。

最高のは非常に相対的な用語であり、あなたの質問のために、私はあなたが信頼性の高いツールを探していると想像ので、私はこの機能が考慮されるべきだと思います。 私は、ツールを提供する企業の支援と強度を探します。 あなたが使用していないと答えは、この会社はもう存在しない任意のツールのサポートに連絡しようとすると、それは恐ろしい感じです。 HAPは、開発者コミュニティによって維持されているように、私はむしろ彼女を信頼します。

あなたは.NETの世界の外に見えるように用意されている場合は、 PythonはSOコミュニティは、美しいスープを推奨しています 例えば HTMLパーサ・イン・パイソン

  

美しいスープは、画面スクレイピングのような迅速なターンアラウンドプロジェクトのために設計されたPythonのHTML / XMLパーサーです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top