爬虫使用xpath解析网页出现空列表的终极解决方案!

本文讲述了在猪八戒网接单时遇到的XPath解析问题,提供了解决方案,包括检查XPath正确性、识别页面异步加载机制以及处理Element对象列表的技巧。

     我知道这是一个很小的问题,从一开始就知道,但还是解决了一天,为了避免有别人也踩坑,给出终极解决方案!

这里以猪八戒网站外包项目接单_免费外包项目发布平台-猪八戒网 (zbj.com)为例!

出现问题:xpath解析后出现空列表。

代码如下:

import requests
from lxml import etree
headers = {'User-Agent': 'User-Agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;'}
url = "https://task.zbj.com/hall/waibao-all-0-p1"
rep = requests.get(url, headers=headers)
html = etree.HTML(rep.text)
dis = html.xpath('//*[@id="hall-list-wrap"]/div[4]/div[1]/div[1]/div[1]/text()')
print(dis)

直接就算一个大NO特NO~

解决方法:

一.  查看自己的xpath是否正确:可以通过网页检查(f12)然后右键复制xpath,最好两个都试试也就是完整的xpath又是会犯病,注意一点就是:当xpath出现tbody其实是不存在的,例如

//*[@id="hall-list-wrap"]/div[4]/div[1]/tbody/div[1]/div[1]

删除tbody就可以了

二.页面异步加载

通俗说也就是一个网页可以分开加载,造就不同的连接,

点击检查页面的网络,可以看见不同的url传输的数据,来进行异步加载,这种技术在视频网站应用更广。。,此时就需要读取不同的url较为复杂,本文不赘述,以后有空发文深刻探讨。。

三.

很多人可能并不知道xpath的返回值,对于lxml的etree的xpth他会返回一个Element对象列表,对于这个对象的话如果不是最后一个标签的话无法使用/text函数的,否则就会出现空列表,如果一定要获取内容的话,可以遍历每一个对象然后使用tostring方法:

for i in dis:
 print( etree.tostring(i, encoding="utf-8", pretty_print=True))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值