python爬虫中遇到的乱码问题

2020-05-13  本文已影响0人  6e586345cd00

一.问题背景

最近因为做数据分析需要用到py去爬取数据,然后学习了py爬虫的基础。笔者爬取的是LPL春季赛的战队比赛数据,然后在这个过程中遇到了乱码问题。

二.问题分析

以下是爬取数据的部分代码

url = 'https://lpl.qq.com/es/data/rank.shtml?iGameId=134&sGameType=1,5'
res = requests.get(url,params=params,headers=headers)

获得res后笔者就顺手打印了一下res.text(),结果是正常打印如下:


image.png

发现有乱码产生,然后笔者看到网页的charset='gbk',于是就想着直接encode('gbk'),但是却发现还是不对。

r = res.text.encode('gbk')
print(r)

结果报错如下:

image.png
然后笔者将错误复制到度娘查询一番之后,才了解str转bytes叫encode,bytes转str叫decode。所以要把res.text转编码就得先转成bytes然后再解码才行。

于是,笔者开始尝试。在尝试以上方法之前,笔者先打印了一下res.text的encoding

print(res.encoding)
#结果如下
D:\IT\untitled\venv\Scripts\python.exe D:/IT/untitled/lpl_spider.py
ISO-8859-1

Process finished with exit code 0

很明显,res的编码是ISO-8859-1,所以笔者下面的尝试就有头绪了,先将res.text用ISO-8859-1转换成bytes,然后将转好的bytes用网页的charset 也就是gbk解码即可。
具体代码如下:

r = res.text.encode('ISO-8859-1').decode('gbk')
print(r)

下图可以发现,中文乱码问题解决了。


image.png

三.收获总结

python3里面,字符串要先encode手动指定其为某一编码的字节码之后,才能decode解码。

爬虫编码乱码解决思路:

response.text.encode('A').decode('爬取网页的charset')

四.参考网址

上一篇下一篇

猜你喜欢

热点阅读