前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬虫——从浏览器复制的Xpath无法解析(tbody)

Python爬虫——从浏览器复制的Xpath无法解析(tbody)

作者头像
zy010101
发布2021-04-23 11:08:31
6.6K0
发布2021-04-23 11:08:31
举报
文章被收录于专栏:程序员

今天遇到一个问题,我的爬虫想抓取一个网页上的有些内容,使用Xpath解析的方式。前几个内容都可以被Xpath解析,但是最后一个标签内的内容始终解析不到,困扰了我一上午。最后我一步一步尝试解决了。但是我并不知道是为什么?这个场景就是程序已经执行起来了,但是你完全不知道它为什么能正常运行。下图可以完美描述。

下面这个视频更加生动:https://www.bilibili.com/video/av370044900/,建议反复观看。

后来,经过我返回斟酌关键字,进行搜索,看到前辈们的经验,发现原来是浏览器的锅。经测试,Firefox和Chrome在检查的时候,你看到的代码是经过浏览器优化的。不是网页原本的源码。这时候就会导致你复制的Xpath是错误的,因此你的Python爬虫解析不到任何内容。这个时候的你很懵。明明前面的Xpath都没有问题,抓取到了相应的内容,但是偏偏唯独这一个抓取不到。

真实案例如下,浏览器检查的时候,看到的源码会加上tbody标签,但是实际代码里是没有这个标签的,所以复制的Xpath不对。

上图是通过检查(F12)看到的源码以及复制的Xpath,但是通过查看网页源代码看到的代码没有tbody。如下图所示。table下面直接就是tr标签了,根本没有tbody标签。所以,lxml要是能找到内容才是见鬼了。

经测试,Firefox,Chrome,Edge浏览器都会自动加上这个tbody标签,真是巨坑一个。别人是站在巨人的肩膀上,我是站在巨人挖的坑里,简称“巨坑”。 因此,当Xpath解析不到内容的时候,建议看一下源码。

我之前的代码里的Xpath是://*[@id="main-content"]/section/div[3]/div/table/tbody/tr[2]/td[2]/pre/text()

真实的Xpath其实是://*[@id="main-content"]/section/div[3]/div/table/tr[2]/td[2]/pre/text()

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/04/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档