如何使用HTMLAgilityPack访问多个<div>标签的内容?

时间:2015-06-07 15:51:54

标签: c# html wpf html-agility-pack

我无法在codeplex网站上找到HTMLAgilityPack的文档。目前我想要做的是访问亚马逊网站上的div,并抓取文本信息以便在WPF应用程序中使用。

var getWeb = new HtmlWeb();                     
var doc = getWeb.Load(uri);
HtmlNode ourNode = doc.DocumentNode.SelectSingleNode("//div[@id = 'zg_centerListWrapper']");

此div包含大约12个其他div,每个div都是best sellers类别中的项目。

为了访问每个人的属性似乎是艰苦的(我也不完全确定我是如何在第一眼看到的)。那么我应该使用DocumentNode.SelectNodes()吗?我将如何实现它?此外,我发现很难相信,经过这段时间后,HTMLAgilityPack还没有文件......也许我在寻找错误的地方,因为youtube似乎是我最好的来源。时刻。

2 个答案:

答案 0 :(得分:1)

实际上,SelectNodes()SelectSingleNode()的参数是 xpath表达式,xpath版本1.0是准确的(参见xpath 1.0 spec here)。

XPath是另一项技术,它有自己的规范,文档和讨论。您通常可以搜索xpath教程或文章而不是HtmlAgilityPack(HAP)细节,以便更好地了解应该将哪种表达式传递给HAP以获取特定的HTML元素。

为了举例,假设你的HTML看起来像这样:

<div id="zg_centerListWrapper">
    <div>I want this</div>
    <div>..and this</div>
    <div>..and this one too</div>
</div>

看到您感兴趣的divdiv[@id = 'zg_centerListWrapper']直接孩子,然后您可以使用以下xpath来获取它们:

var xpath = "//div[@id = 'zg_centerListWrapper']/div";
HtmlNodeCollection ourNodes = doc.DocumentNode.SelectNodes(xpath);

答案 1 :(得分:0)

您可以使用DocumentNode.Descendants("div"),然后使用

.Where(div => div.Attributes.Contains("class") && div.Attributes["class"].Value.Contains("best category"))

但是,文档肯定有帮助..