Select 具有指定子节点的节点

Select a Node which has specified subnodes

我必须写一个网络抓取工具。我的 php 页面是:

<a href="Something.php">
<div class="SPECIFIEDCLASS" title="other something">
</div>
</a>

到目前为止我写的是:

var diiv = doc.DocumentNode.SelectNodes("//a/div[@class='SPECIFIEDCLASS']");

var hrefLiist = diiv.Select(q => q.GetAttributeValue("href", "not found")).ToList()

但它不起作用。

您的 XPath 表达式在 a 个标签内选择具有指定 class 的 div 个标签。 但是你想要的是 a 标签和 div 标签与指定的 class。您应该改为使用此 XPath 表达式:

var diiv = doc.DocumentNode.SelectNodes("//a[div[@class='SPECIFIEDCLASS']]");

更直观的解释:

您的 XPath 对每个 a 标记执行此操作:

  • 获取 a 标签。
  • 获取子 div 标签。
  • Select div 标签带有 Class = "SPECIFIEDCLASS"所以最终,div 标签本身被选中

正确的 XPath 应该这样做:

  • 获取 a 标签。
  • Select a 标签,其中:
    div 标签有 Class = "SPECIFIEDCLASS"这里选择了a标签