python爬取网页小说去除nbsp_python爬虫 爬取内容的时候&nbsp 空格内容变成问号‘?’...

正好我也遇到了这个让人无比蛋疼的问题。

一、先说一个与主题无关的蛋疼经历。

我要抓取某网站上电视剧的信息。

1.观察网页,发现我要的导演名字啊,地区啊之类的信息都存在dd标签里面。最开始我用pq对象(即PyQuery)把所有的dd标签的内容按顺序拿出来然后,对应赋值给导演啊什么的。但是跑了点数据后发现,有的网页我匹配出来导演位置上出现的是地区,或者年份,或者其他的什么东西。这就很尴尬。后来发现是因为不是所有的网页元素的dd都一样的,有的没有地区,有的没有更新。穷则变。

2.我又发现不管标签是不是相同,但是每一个dt后面都只跟着一个dd,而且他们两是相对应的。于是我写了如下代码:

结果发现他的输出不全。看了看是下标的问题,于是改成下面的样子就ok了。

两条print语句的输出如下:

一切都很完美。这样我只要根据key值来匹配就好了,不用再考虑标签的顺序和数量了。于是我写了如下的匹配语句:

欢天喜地七仙女的开始运行,结果毛都没有出来!!!

输出字典,发现它是有东西的,那就只能是 if 语句匹配的问题。回头看网页源码(第一张的红圈圈)发现它上面是用&nbsp做分割符号的。原来&nbsp占位符还和空格不一样,我以为它只是能重复在html上显示的空格。于是机智的我从 print 语句的输出中把他们粘贴复制到我的代码中代替自己写的 if 语句中含有空格而不是说&nbsp的匹配条件。

然后,还是毛都没有。真是一腔诗意喂了狗。然后我实在没办法了,灵机一动,把 while 语句改成了这个样子:

这样就绕开了&nbsp的诅咒,只需要把所有的 if 语句也简单的修改一下只留下第一个字就大功告成,可以出去浪了。事实证明这样是好使的。

二、回到主题。遇到&nbsp怎么办?

后来我回去尝试解决这个问题,写了如下代码:

我想看看到底空格和 &nbsp 有什么区别,所以用了repr(这就是火眼静静,用它能看到妖怪的原型。顺便,我想静静了)。输出结果如下:

&nbsp 的原型是 \xc2\xa0,空格就是空格。

然后我再把 '\xe5\x88\xab\xc2\xa0\xe5\x90\x8d\xef\xbc\x9a' 粘贴到wing IDE 中:

再把红圈圈中的东西粘到 if 语句后面就好使了。

最后我拿到了&nbsp,大概像这样:

两个 '|' 之间的就是让人蛋疼不已的 &nbsp 了。

像题主这样的,只需要在自己的IDE上运行如上代码后获得 &nbsp 的具体化的东西,做匹配判断。如果相等跳过就好了。

具体做法如下:

把 | | 复制粘贴出来,再放到 == 后面,然后删去两边的' | ',可千万别都删了,&nbsp是有长度的,和空字符串不一样长。

希望对你也有帮助,当然了如果还是不好使的话就说明你该重启一下电脑、洗个澡、听一首很叼的歌(比如这个:Nâdiya的单曲《Roc》: http://music.163.com/song/3171721/?userid=82060026 )再去追一个很漂亮的妹子、这样当你发现自己没钱请她吃好吃的时就可以回来和我一起想到底是为什么了。

已上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值