【问题标题】:Web Scraping - XPath - Find all elements of specific tag in div [duplicate]Web Scraping - XPath - 在 div 中查找特定标签的所有元素 [重复]
【发布时间】:2018-09-21 11:09:38
【问题描述】:

我正在使用“Scrapes”wordpress 插件。

我想从特定的 div 中提取所有段落。

<div id="main" class="col-md-9 col-sm-8">
 <div class="inside-post"> 
  <p>One</p>
  <p>Two</p>
  <p>Three</p>
 </div>
</div>

下面的代码只返回第一项:

//div[@id="main"]/div[contains(concat(" ", normalize-space(@class), " "), " inside-post ")]/p[1]

One

但我想要所有三个:

One
Two 
Three

请帮忙。提前谢谢。

【问题讨论】:

  • 只是为了让您知道您的 XML 示例对您发布的 XPath 没有帮助,因为您的 XPath 期望另一个 div 的 id 为 main 作为 div 的父级在你的例子中。最好发布实际与您询问的 XPath 一起使用的 XML 示例。
  • 我认为没有必要。这是可以理解的。
  • 如果您希望人们确定您的问题,这是必要的。另外,请在您的问题中添加更多信息,因为我在回答中给您的 XPath 返回所有 3 个 p 元素。
  • 您的代码未返回所有元素。谢谢。如果您的回答未被其他人接受,请不要将任何人的问题降级。
  • 我正在尝试提供帮助 - 我提供的 XPath 选择了您提供的 XML 示例中的所有三个 p 元素。如果您仍然只得到第一个,那么问题可能出在其他地方 - 例如您实际上是如何使用此 XPath 的。如果没有这些信息,就很难知道您的问题是什么,因此如果您在问题中添加更多详细信息,它将帮助人们帮助您。

标签: wordpress xpath web-scraping domxpath


【解决方案1】:

您的 XPath 专门选择第一个元素 - /p[1]。如果您删除了[1],那么您应该选择所有p 元素。

试试

//div[@id="main"]/div[contains(concat(" ", normalize-space(@class), " "), " inside-post ")]/p

【讨论】:

  • 我已经试过了。此代码也只返回第一个元素。
  • 在这种情况下,您需要向我们提供更多信息。我发布的 XPath 有效。如何访问返回的节点列表?
  • 如果这个(正确的,+1)答案没有帮助,那么 OP 的问题与如何处理 XPath 的结果有关。 Asad Rao:有关详细信息,请参阅重复链接。它讨论的是文本节点而不是元素,但概念是相同的:函数(在 XPath 和宿主语言中)通常采用节点集的第一个节点。当您确定您的 XPath 正在选择多个节点但您没有看到它们时,这应该是您的第一个怀疑。
猜你喜欢
  • 2018-04-29
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
相关资源
最近更新 更多