Html Agility Pack仍然是最好的.NET HTML解析器嗎?

.net c# html html-agility-pack parsing

Html Agility Pack是前一段時間給出StackOverflow問題的答案,它仍然是最好的選擇嗎?還應考慮其他哪些選擇?有更輕量級的東西嗎?

一般承認的答案

有一個電子表格與比較。

綜上所述:

CsQuery性能與Html Agility Pack和Fizzler我將一些性能測試放在一起,將CsQuery與我所知道的唯一實用替代品(Fizzler,一個HtmlAgilityPack擴展)進行比較。我測試了三種不同的文件:

  • 嘶嘶聲測試文件(約11 k)
  • 維基百科條目“奶酪”(約170 k)
  • 單頁HTML 5規範(約6兆字節)

總體結果是:

  • HAP在將HTML字符串加載到對像模型中的速度更快。這是有道理的,因為我不認為Fizzler構建索引(或者它可能只構建一個相對簡單的索引)。 CsQuery需要1.1到2.6倍的時間才能加載文檔。更多關於此的信息。
  • 幾乎所有其他東西的CsQuery都更快。有時因數為10,000或更多。唯一的例外是“*”選擇器,有時Fizzler更快。對於所有測試,結果都是完全列舉的;這種情況只會導致樹中的每個節點都被枚舉。因此,這不會像數據結構那樣測試選擇引擎。
  • CsQuery在返回與瀏覽器相同的結果方面做得更好。這裡的每個選擇器都使用jQuery 1.7.2在Chrome中針對同一文檔進行了驗證,並且數字與CsQuery返回的數字相匹配。這可能是因為HtmlAgilityPack以不同方式處理可選(缺失)標籤。另外,在Fizzler中沒有完全實現nth-child - 它只支持簡單的值(而不是公式)。

熱門答案

談到HTML解析時,沒有與真實的東西進行比較。這是validator.nu解析器的C#端口 。這與基於Gecko的瀏覽器(例如​​Firefox)使用的代碼庫相同。回購看起來有點塵土飛揚,但不要被愚弄..港口非常出色。它被忽略了。我大約一個月前將它集成到CsQuery中 。它通過了所有CsQuery測試(包括大多數移植到C#的jQuery和Sizzle測試)。

我不知道用C#編寫的任何其他HTML5解析器,或者甚至是任何在丟失,可选和無效標記處理方面做得很好的HTML5解析器。這不僅做得很好 - 它符合標準。

我上面鏈接的repo是原始端口,它包含一個生成XML節點樹的基本包裝器。 CsQuery 1.3及更高版本使用此解析器。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因