今天早上早早地过来就被盆友要求给下一部小说。
这样还不行,还要给她下载好。
给出主意万能主意,还不行。
正好最近学习了下爬虫,手痒痒尝试了下,顺带装个逼。没想到。。。
环境飞机票
飞机票:小说花千骨
前段时间总结的小说爬虫:【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
结果
最后还是艰难的完成了任务。一个小问题花了一上午,还是技术不过关呀。
本文是在上一篇小说爬虫的基础代码上修改的。
结束语
欢迎大家关注我们的公众号,每天学一点技术。如果觉得有用给点个赞,谢谢!!