如何用XPath提取href?

时间:2018-03-22 06:46:49

标签: python xpath scrapy lxml

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()")

输出结果为:

[] 

我做错了什么?

4 个答案:

答案 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")