python爬虫015-处理网页源码中的 问题,以及用pyquery解析时遇到的奇葩Bug。

先从网页源码来看吧:

image.png
中间的内容我省略了

我需要的内容就在这个

标签中,从这一点来看还是很友好的。

比如我要的到这个籍贯信息:

image.png

可以发现,在“江苏”之前,有一个 ,这个符号是html中的空格符号。
如果学过前端的相关知识,就会知道,在浏览器解析页面的时候,“ ”空格是省略的,不显示的,如果我们需要显示空格就需要使用 。
但是这给我们解析的时候带来了很大的困难,总是报gbk解析器无法解析之类的错误。

事实上我上面是瞎说的,这里的主要问题,就在这里:

--snip--
native_place = doc.find(
            '#xjkpTable > tbody > tr:nth-child(7) > td:nth-child(2)'
        ).text()
--snip--

这一条语句不会有任何的输出。因为它的到的东西是空的。

我从昨天的这个时候到今天下午的五点,才解决这个问题,这个伪类选择器是我从浏览器直接复制下来的,应该是没问题,所以我把测试的重点放在了页面源码的编码上,什么gbk、utf-8、utf-16,基本上常见的编码方式都试过了,encode,decode啥的都用上了,也没用。

后来。我用response.encoding打印出响应的编码方式,结果他就是utf-8。
emmmmm
那为什么获取不到呢?
后来用了xpath、BeautifulSoup、各种解析库,就是得不到正确的结果,而且编码问题越来复杂,我把它保存到本地,它又说gbk无法解析、cp936啥的也不行、laint-1啥的也出来了。

想了一整天,看遍了度娘的前几页,一无所获。

后来我试了试,将伪类选择器换一换,因为我是直接用开发者工具拷贝下来的,所以我没有怀疑他的准确性,一般来说页没有问题。我直接选择了

标签:
find('table')
是有结果的,而且没乱码。
然后我有选择了
find('tbody')
!!!!没了,什么都没有了。没输出,没报错。
然后我直接选择了所有的标签:
find('tr')
? ? ? ?又有结果了,emmmm,html里有这个标签吗?

???

这w3school上查的,应该是有的。

那没问题啊,又想了很久。

不知道你么注意到了没有,最开始的两张图里的

的结束标签是灰色的。

我最开始的时候之一到了,但是不知道什么意思,现在也还是不知道。

于是我做了一个很简单的事情,把伪类选择器的tbody标签那一层删除。

--snip--
native_place = doc.find(
            '#xjkpTable > tr:nth-child(7) > td:nth-child(2)'
        ).text()
--snip--

普天同庆,解决了。。

解决的稀里糊涂。就这样子,我的到了我想要的数据。

前面什么 ,邮,\xa0,等等奇怪的编码问题,都没了。

天哪,我浪费了一整天在这个bug上。

F U

你可能感兴趣的:(python爬虫015-处理网页源码中的 问题,以及用pyquery解析时遇到的奇葩Bug。)