【Python】轻松搞定小说文本爬虫乱码问题

今天早上早早地过来就被盆友要求给下一部小说。

这样还不行,还要给她下载好。

给出主意万能主意,还不行。

正好最近学习了下爬虫,手痒痒尝试了下,顺带装个逼。没想到。。。


环境飞机票

飞机票:小说花千骨

前段时间总结的小说爬虫:【Python】基于Python3的爬虫----是时候下本小说看看了!

然后翻车了。

下载下来全是乱码,我也是醉了。有点抓狂,有点想揍站长了。。

乱码来源

查看原因

我将网页下载下来用文本打开,查看代码,是gbk编码,需要进行转码,这方面不清楚,查了下资料。

尝试通过encode直接转换成gbk格式,发现报错。

PS:爬取的所有网页无论何种编码格式,都转化为utf-8格式进行存储,与源代码编码格式不同所以出现乱码

编码区别  

  • UTF-8通用性比较好,是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。
  • UTF-8编码的文字可以在各国各种支持UTF8字符集的浏览器上显示,也就是必须两者都是utf-8才行。
  • gbk是是国家编码,通用性比UTF8差,GB2312之类的都算是gbk编码。
  • GBK包含全部中文字符;UTF-8则包含全世界所有国家需要用到的字符。
  • unicode是一种二进制编码,所有utf-8和gbk编码都得通过unicode编码进行转译,即utf-8和gbk编码之间不能直接转换。

附图如下:

乱码解决

python中编码转换用到了两个函数decode()和encode()

  比如:html=page_req.text.encode('iso-8859-1').decode('utf-8')
  encode('iso-8859-1') 是将gbk编码编码成unicode编码
  decode(‘gbk’) 是从unicode编码解码成gbk字符串

由于pycharm只能显示来自unicode的汉字,代码修改如下:

    def get_contents(self,target, filename = 'aaa.txt', title='xxx'):
        req = requests.get(url = target)
        html = req.text.encode('iso-8859-1')
        bf = BeautifulSoup(html,"html.parser")
        texts = bf.find_all('div', class_ ="contentbox", id = 'htmlContent')
        try:
            self.writer(filename, title, texts[0].text.replace('\n','\n'))
        except IndexError:
            print('index error')
            self.get_contents(target, filename, title)
            pass

结果

最后还是艰难的完成了任务。一个小问题花了一上午,还是技术不过关呀。

本文是在上一篇小说爬虫的基础代码上修改的。

附带飞机票:【Python】基于Python3的爬虫----是时候下本小说看看了!

结束语

欢迎大家关注我们的公众号,每天学一点技术。如果觉得有用给点个赞,谢谢!!

å¨è¿éæå¥å¾çæè¿°

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值