Html Agility Pack 的替代方案是CsQuery,一个 C# jQuery 端口,我是它的主要作者。它允许您使用 CSS 选择器和完整的 Query API 来访问和操作 DOM,这对许多人来说比 XPATH 更容易。此外,它的 HTML 解析器是专为多种目的而设计的,并且有多种解析 HTML 的选项:作为完整文档(html, body
将添加缺少的标签,并将任何孤立的内容移动到正文中);作为一个内容块(意思是 - 它不会被包装为一个完整的文档,但是可选的标签,如tbody
在 DOM 中仍然是强制性的,就像浏览器一样),并且作为一个真正的片段,没有标签被创建(例如,如果您只是使用构建块)。
有关详细信息,请参阅创建新 DOM。
此外,CsQuery 的 HTML 解析器被设计为遵循 HTML5 规范的可选结束标记。例如,关闭p
标签是可选的,但有特定的规则可以确定何时关闭块。为了生成与浏览器相同的 DOM,解析器需要实现相同的规则。CsQuery 这样做是为了提供与给定源的浏览器 DOM 的高度兼容性。
使用 CsQuery 非常简单,例如
CQ docFromString = CQ.Create(htmlString);
CQ docFromWeb = CQ.CreateFromUrl(someUrl);
// there are other methods for asynchronous web gets, creating from files, streams, etc.
// css selector: the indexer [] is like jQuery $(..)
CQ lastCellInFirstRow = docFromString["table tr:first-child td:last-child"];
// Text() is a jQuery method returning text contents of selection
string textOfCell = lastCellInFirstRow.Text();
最后,CsQuery 根据类、id、属性和标签对文档进行索引 - 与 Html Agility Pack 相比,选择器的速度非常快。