如何使用XPath提取href属性?现有提取代码返回空数组,问题出在哪?
你的XPath代码问题分析与解决方案
嘿,我来帮你拆解下这段代码的问题,以及怎么正确提取href属性~
首先,你的代码返回空数组[]主要有两个原因:
- XPath索引规则用错了:XPath里的元素索引是从1开始的,不是0!你写的
a[0]根本定位不到任何元素,因为不存在第0个a标签。如果这个div下只有这一个a标签,直接写a就可以,或者用a[1]明确指定第一个a元素。 - 提取目标不对:这个a标签里面嵌套的是img元素,本身没有文本内容(
text()提取的是元素的文本节点),所以哪怕定位到了a标签,用text()也拿不到任何内容,自然返回空数组。
接下来,说说怎么提取a标签的href属性:
要提取HTML元素的属性,XPath里用@属性名的语法就可以。针对你的场景,正确的写法应该是:
hrefs = doc.xpath("//div[@class='image']/a/@href")
执行这段代码后,就能得到a标签的href属性值啦(结果会是一个包含该URL的列表,因为xpath方法默认返回所有匹配结果的列表)。
如果只需要第一个匹配到的href值,还可以这样写(以lxml库为例):
# 方法1:取列表第一个元素 first_href = doc.xpath("//div[@class='image']/a/@href")[0] # 方法2:先定位到a元素,再用get方法取属性 first_href = doc.xpath("//div[@class='image']/a")[0].get('href')
内容的提问来源于stack exchange,提问作者iDelusion
相关产品推荐
相关产品推荐

