我想使用XPath从href
- 标记中获取a
属性,但它在同一文件中有两次出现。我怎么相处?
我需要检查IF是否存在值为$ street / object的href
属性,我有这个代码并且它不起作用:
$product_photo = $xpath->query("//a[contains(@href,'{$object_street}fotos/')][1]");
$product_360 = $xpath->query("//a[contains(@href,'{$object_street}360-fotos/')][1]");
$product_blueprint = $xpath->query("//a[contains(@href,'{$object_street}plattegrond/')][1]");
$product_video = $xpath->query("//a[contains(@href,'{$object_street}video/')][1]");
它根本不会返回任何内容。谁可以帮助我?
答案 0 :(得分:65)
对于以下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
答案 1 :(得分:0)
@mockinterface共享的答案是正确的。尽管我想加2美分。
如果有人使用scrapy
之类的框架,则必须使用/html/body//a[contains(@href,'com')][2]/@href
和get()这样的>
response.xpath('//a[contains(@href,'com')][2]/@href').get()