gpt4 book ai didi

html - 使用 Xpath 抓取不一致的 DOM

转载 作者:行者123 更新时间:2023-11-28 03:22:10 25 4
gpt4 key购买 nike

我想抓取帖子名称,对于模式一,它位于一个范围内

enter image description here

但是论坛帖子可以像这样(第 7 行)

enter image description here

因为线程是一个轮询。

所以在我的例子中我无法定位跨度(第 8 行第一张图片),我使用了 descendants-or-self 但很难做到正确。这里有什么问题吗?

$postTitle = $xpath->query("//tr/td[@class='row1'][3]/div/div[1]//descendant-or-self::text()");

最佳答案

使用此表达式,您将选择第一个 <a><div>您要提取的文本所在的位置:

//tr/td[@class='row1'][3]/div/div[1]/a[1]

我假设您打算选择一个 元素(而不是节点集)。为此,您可以使用 string() 获取此表达式的字符串值(它将返回后代节点中的所有文本)或 normalize-space() (修剪并删除多余的空格):

normalize-space(//tr/td[@class='row1'][3]/div/div[1]/a[1])

这将提取 Salary vs age/ktards are you...取决于找到的节点。

如果有多个匹配项,它将返回一个集合,您应该对其进行迭代并分别获取每个匹配项的字符串值。在节点集上使用这些函数将为您提供 first 元素中的文本,并丢弃其他元素。

如果你只需要处理两种情况:1) text inside a/span , 2) 里面的文字a ,您可以直接使用联合(|)运算符选择文本节点:

//tr/td[@class='row1'][3]/div/div[1]/a[1]/text() | //tr/td[@class='row1'][3]/div/div[1]/a[1]/span/text()

关于html - 使用 Xpath 抓取不一致的 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23819272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com