美文网首页
python爬虫015-处理网页源码中的 问题,以及用

python爬虫015-处理网页源码中的 问题,以及用

作者: DKider | 来源:发表于2019-04-18 20:19 被阅读0次

    先从网页源码来看吧:

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

    我需要的内容就在这个<table></table>标签中,从这一点来看还是很友好的。

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

    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啥的也出来了。

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

    后来我试了试,将伪类选择器换一换,因为我是直接用开发者工具拷贝下来的,所以我没有怀疑他的准确性,一般来说页没有问题。我直接选择了<table>标签:
    find('table')
    是有结果的,而且没乱码。
    然后我有选择了<tbody>
    find('tbody')
    !!!!没了,什么都没有了。没输出,没报错。
    然后我直接选择了所有的<tr>标签:
    find('tr')
    ? ? ? ?又有结果了,emmmm,html里有<tbody>这个标签吗?

    ???

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

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

    不知道你么注意到了没有,最开始的两张图里的<tbody>的结束标签</tbody>是灰色的。

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

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

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

    普天同庆,解决了。。

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

    前面什么&nbsp,&#37038,\xa0,等等奇怪的编码问题,都没了。

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

    F U

    相关文章

      网友评论

          本文标题:python爬虫015-处理网页源码中的 问题,以及用

          本文链接:https://www.haomeiwen.com/subject/qsztgqtx.html