HTML结构是这样的:
<div class="image">
<a target="_top" href="someurl">
<img class="_verticallyaligned" src="cdn.translte" alt="">
</a>
<button class="dui-button -icon" data-shop-id="343170" data-id="14145140">
<i class="dui-icon -favorite"></i>
</button>
</div>
提取文本的代码:
buyers = doc.xpath("//div[@class='image']/a[0]/text()")
输出结果为:
[]
我做错了什么?
答案 0 :(得分:3)
您的XPath不正确,因为XPath中的索引(与大多数编程语言不同)从1
开始,而不是从0
开始!
所以正确的XPath应该是
//div[@class='image']/a[1]/@href
请注意a[1]
代替a[0]
还应使用text()
来提取文本节点。如果您需要提取特定属性的值,则应使用@attribute_name
语法或attribute::attribute_name
答案 1 :(得分:1)
使用@href
获取href
属性的值。
buyers = doc.xpath("//div[@class='image']/a[0]/@href")
答案 2 :(得分:0)
使用attrib['href']
应该有帮助。
s = """<div class="image">
<a target="_top" href="someurl">
<img class="_verticallyaligned" src="cdn.translte" alt="">
</a>
<button class="dui-button -icon" data-shop-id="343170" data-id="14145140">
<i class="dui-icon -favorite"></i>
</button>
</div>"""
from lxml import etree
tree = etree.HTML(s)
r = tree.xpath("//div[@class='image']/a")
print(r[0].attrib['href'])
<强>输出:强>
someurl
答案 3 :(得分:0)
/text()
表示您在该标记内获取文字,为了获取任何属性的值,请/@attribute
,所以在您的情况下,执行doc.xpath("//div[@class='image']/a[0]/@href")