Xpath 定位元素,获取text()返回为None

爬取网站时,调用from lxml import etree库中etree.HTML()可以构造一个符合xpath语法的html文本。通过xpath解析文本,想要定位到目标参数。

在浏览器中复制Xpath,或者full Xpath,在浏览器中ctrl+f,可以正常找到,但是放到代码里就返回None

import requests
from lxml import etree

thumbnail = requests.get(url, headers=headers, data=payload)  # 缩略图
print(thumbnail.text)  # 爬取内容正确,可以看到目标元素
print(thumbnail.status_code)
html = etree.HTML(thumbnail.text)
div_list = html.xpath('//*[@id="mmComponent_images_1"]/ul[1]/li[1]/div/div[1]/a')
# div_list = html.xpath('/html/body/div[3]/div[5]/div[2]/div[1]/ul[1]/li[1]/div/div[1]/a')
for div in div_list:
    print(div.text)

 不论是用谷歌浏览器copy Xpath 还是 copy full xpath 都返回为None

有两种失败的原因

1.谷歌浏览器再html排列时会自动加入一些/table/tbody,但是代码爬取时没有这些,就会导致找不到

(5条消息) xpath定位元素返回列表为空_菜鸟上路_lbz的博客-CSDN博客https://blog.csdn.net/qq_44198436/article/details/104077558

这种情况可以用相对路径copy Xpath可以解决

2.真正的内容已经找到,但是用tree.text后就会将返回值<Element a at 0x149ab151888>解析成None

只需调用 div.text、div.tag、div.attrib不同的解析etree方法即可

    thumbnail = requests.get(url, headers=headers, data=payload)  # 缩略
    print(thumbnail.status_code)
    html = etree.HTML(thumbnail.text)
    div_list = html.xpath('//*[@id="mmComponent_images_1"]/ul[1]/li[1]/div/div[1]/a')
    for div in div_list:

        print(div.text)
        print(div.tag)
        print(div.attrib)

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值