小白学Python爬虫Xpath 返回空列表的问题,全网都没有说过的问题
- 一定记住,用浏览器抓的Xpath 不一定适用
- Xpath的变化
一定记住,用浏览器抓的Xpath 不一定适用
很多人都习惯用浏览器抓的Xpath直接用在python里,然后经常会遇到抓完后返回的是空list
我也是初学,然后我就遇到了这种问题。于是开始全网找这个问题的解决方案,不幸的是翻遍了整个百度、整个C站,所有跟此类问题有关系的python文章,没有一个能解决问题。
如果你也遇到这种情况,一定要看完这篇文章。
Xpath的变化
直接上示例:
我原来用的xpath是
“//div[@class=“s_left f_l”]/div[3]/div[5]/p[1]/text()”
注:这个结构是我用八爪鱼软件抓取文本的时候生成的,在Firefox浏览器里firepath里是可以正确抓到我想要的文本的。
但是我放在python里就是抓不到,总是返回空列表。
我把网上的各种方法都试过了,就是不行!!!我甚至换成固定式的xpath 这样:html/body/div[6]/div/div[1]/div[3]/div[5]/p/text()
仍然不行!!
网上唯一几个接近答案的文章就是说要把“tbody”删除,因为python里格式化后已经自动去掉了“tbody”,但是我的xpath里明明没有“tbdoy”这个标签。
还有说因为有
这个标签 导致抓不到,这个标签只会导致只能抓第一个数据,后面并列的
下的确实抓不到,但是这不是我的问题,我的问题是什么都抓不到,返回的是空列表。
实在没办法,我在想是不是抓取的源代码有什么问题,于是我便把整个抓到网页的源代码都写入到一个文本文件里,用Notepad打开观察。写代码的都用这玩意,这个确实好用,能把html源码进行归类。
然后在把浏览器F12下的源代码也放入Notepad,我进行了对比才发现问题。
原来的 Xpath 是这样
“//div[@class=“s_left f_l”]/div[3]/div[5]/p[1]/text()”
我改后的是这样:
“//div[@class=“s_left f_l”]/div[3]/div[2]/p[1]/text()”
没错,就是二级的div标签数量改变了!!!!经过python格式化后的Xpath,自动清洗掉了三个div标签,结果导致我用原始Xpath路径怎么都抓不到信息。
由于我也是小白,具体我也不太懂是什么机制导致自动清洗掉了三个div标签。只不过这种情况,确实在网上没有看到任何一篇帖子有说明过。
其他小白学习的时候遇到这种情况,可以参考一下