ChatGPT解决这个技术问题 Extra ChatGPT

如何通过 XPath 的链接文本找到链接 URL?

我有一个格式良好的 XHTML 页面。当我有链接的文本时,我想找到链接的目标 URL。

例子

<a href="http://stackoverflow.com">programming questions site</a>
<a href="http://cnn.com">news</a>

我想要一个 XPath 表达式,如果给定 programming questions site,它会给出 http://stackoverflow.com,如果我给它 news,它会给出 http://cnn.com


T
Tim Cooper

应该类似于:

//a[text()='text_i_want_to_find']/@href

我会学习 xpath 吗?当我看到一个查询时,它是如此明显且易于理解......但我永远无法自己写一个
@flybywire 如果您阅读了斯坦福的免费数据库简介课程,其中有一个很好的部分介绍了 XML 和 XPath。
您可以使用 ".=" 代替 text(),例如 //a[.='Register here']
如果我不知道文本怎么办?我可以选择包含http或某些关键字的节点吗?
D
David Moles

对你来说太晚了,但对于其他有同样问题的人来说......

//a[contains(text(), 'programming')]/@href

当然,“编程”可以是任何文本片段。


这个比较笼统。好分享
这是区分大小写的。我可以忽略这里的情况吗?
D
David Moles
//a[text()='programming quesions site']/@href 

它基本上标识了一个具有您想要的文本的锚节点 <a>,并提取了 href 属性。


P
Peter Mortensen

将方括号中的短语视为 SQL 中的 WHERE 子句。

所以这个查询说,“选择出现在任何地方(//)的“a”标签的“href”属性(@),但只有在(括号内的短语)“a”标签的文本内容等于“编程问题网站'”。


嗨,彼得,你有学习 xpath 查询的教程网站吗?
D
David Moles

对于不区分大小写的包含,请使用以下内容:

//a[contains(translate(text(),'PROGRAMMING','programming'), 'programming')]/@href

translate 将 PROGRAMMING 中的大写字母转换为小写编程。


请不要添加“谢谢”作为答案。在网站上投入一些时间,您将获得足够的 privileges 来支持您喜欢的答案,这是 Stack Overflow 表达感谢的方式。
“谢谢”不是我的“答案”。在某种程度上,我对我改进的上述答案表示赞赏。
A
Adi Lester

如果您使用的是 html 敏捷包,请使用 getattributeValue:

$doc2.DocumentNode.SelectNodes("//div[@class='className']/div[@class='InternalClass']/a[@class='InternalClass']").GetAttributeValue("href","")

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅