今天遇到一个问题,我的爬虫想抓取一个网页上的有些内容,使用Xpath解析的方式。前几个内容都可以被Xpath解析,但是最后一个标签内的内容始终解析不到,困扰了我一上午。最后我一步一步尝试解决了。但是我并不知道是为什么?这个场景就是程序已经执行起来了,但是你完全不知道它为什么能正常运行。下图可以完美描述。
下面这个视频更加生动:当你写了一个乱七八糟的程序,它却恰好完成了任务_哔哩哔哩_bilibili,建议反复观看。
后来,经过我反复斟酌关键字,进行搜索,看到前辈们的经验,发现原来是浏览器的锅。经测试,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()