2个回答

124

对于以下的HTML文档:

<html>
  <body>
    <a href="http://www.example.com">Example</a> 
    <a href="http://www.stackoverflow.com">SO</a> 
  </body>
</html>

使用xpath查询 /html/body//a/@href(或简单地使用//a/@href)将返回:

    http://www.example.com
    http://www.stackoverflow.com

要选择特定的实例,请使用/html/body//a[N]/@href,例如:

    $ /html/body//a[2]/@href
    http://www.stackoverflow.com

要测试属性中包含的字符串并返回该属性本身,请在标签而非属性上进行检查:

    $ /html/body//a[contains(@href,'example')]/@href
    http://www.example.com

混合两种方法:

    $ /html/body//a[contains(@href,'com')][2]/@href
    http://www.stackoverflow.com

编辑:我如何检查特定的href属性?那么我应该使用/html/body//a[1]/@href='{$object_street}/x'吗? - user3239713
非常感谢您的努力!不幸的是,我仍然遇到了问题,我认为这不是查询语句的问题。您介意帮我看一下程序代码并指导我正确的方向吗?如果可以的话,我会发布代码。 - user3239713
1
确保您的查询正确评估了{$object_street},可能需要先将其放入字符串中,例如 "string s = //a[contains(@href,'{$object_street}fotos/')][1]/@href",并检查s是否正确。 - mockinterface
问题在于我不确定代码失败的位置,是条件语句、XPath 查询还是其他什么,哈哈。所以我觉得很难梳理出来。 - user3239713
1
它返回的是一个数组,而不是特定的字符串值。 - Jeú Casulo
显示剩余4条评论

7

@mockinterface分享的答案是正确的。虽然我想补充一下。

如果有人在使用像scrapy这样的框架,则需要使用以下代码才能与get()一起使用:/html/body//a[contains(@href,'com')][2]/@href

response.xpath('//a[contains(@href,'com')][2]/@href').get()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接