我知道这是一个很小的问题,从一开始就知道,但还是解决了一天,为了避免有别人也踩坑,给出终极解决方案!
这里以猪八戒网站外包项目接单_免费外包项目发布平台-猪八戒网 (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))



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

被折叠的 条评论
为什么被折叠?



