寻找带有CSS选择器的C# HTML解析器

5

目前我正在使用HtmlAgilityPack

但是使用Xpath选择非常困难。

在Java中,我知道Jsoup。是否有任何可以执行相同操作的.net库?

解析Html并使用CSS样式选择器查找元素。


XPath有什么问题,你有例子吗? - Trisped
应该将其关闭为 https://dev59.com/Y3I-5IYBdhLWcg3w-92b 的重复问题,而不是作为离题问题。 - Michael Freidgeim
2个回答

6

使用HtmlAgilityPack尝试Fizzler

Fizzler是:

一个.NET库,用于根据CSS选择器从节点树中选择项目。默认实现基于HTMLAgilityPack并从HTML文档中进行选择。

来自项目网站的示例:

// Load the document using HTMLAgilityPack as normal
var html = new HtmlDocument();
html.LoadHtml(@"
  <html>
      <head></head>
      <body>
        <div>
          <p class='content'>Fizzler</p>
          <p>CSS Selector Engine</p></div>
      </body>
  </html>");

// Fizzler for HtmlAgilityPack is implemented as the 
// QuerySelectorAll extension method on HtmlNode

var document = htmlDocument.DocumentNode;

// yields: [<p class="content">Fizzler</p>]
document.QuerySelectorAll(".content"); 

// yields: [<p class="content">Fizzler</p>,<p>CSS Selector Engine</p>]
document.QuerySelectorAll("p");

// yields empty sequence
document.QuerySelectorAll("body>p");

// yields [<p class="content">Fizzler</p>,<p>CSS Selector Engine</p>]
document.QuerySelectorAll("body p");

// yields [<p class="content">Fizzler</p>]
document.QuerySelectorAll("p:first-child");

1
Fizzler自2009年7月以来没有得到维护,并且只有CSS3的部分实现,与CsQuery的100% CSS2和CSS3相比。CsQuery还索引文档,并且比Fizzler + HAP快得多。 - Jamie Treworgy
1
由于存在大量的错误,我不建议使用csQuery。 - tic

2
你可以尝试使用这个库,它看起来非常有前途。我自己没有尝试过,如果你尝试了这个库,也许你想和我们分享一下你的经验。
库:CsQuery 网站:https://github.com/jamietre/CsQuery 示例:
// get all elements that are first children within 'body' (e.g. excluding 'head')
var childSpans = dom["body"].Find(":first-child");

我不建议使用这个,因为它在继承方面存在一些大问题。例如,如果你想要 '.myclass [whatever]' 的父元素的第二个子元素,它将失败。 - HellBaby
我也不建议这样做。它有很严重的漏洞,从未被修复。我已经在问题跟踪器中发布了两个漏洞(它错误地匹配了相邻的相同元素,text()还包括注释)。 - tic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接