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

先从网页源码来看吧:

4a0ff42b7a2c?from=timeline

image.png

4a0ff42b7a2c?from=timeline

中间的内容我省略了

我需要的内容就在这个

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

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

4a0ff42b7a2c?from=timeline

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里有

4a0ff42b7a2c?from=timeline

???

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

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

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

是灰色的。

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

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

--snip--

native_place = doc.find(

'#xjkpTable > tr:nth-child(7) > td:nth-child(2)'

).text()

--snip--

普天同庆,解决了。。

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

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

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

F U

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值