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)
结果报错如下:
然后笔者将错误复制到度娘查询一番之后,才了解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解码。
爬虫编码乱码解决思路:
- 1.首先encoding一下response.text查看初始编码A
- 2.将response.text用encode('A')转为bytes
- 3.将转换完的代码继续用decode解码,解码用的编码是爬取的网页上的编码。即charset。
代码:
response.text.encode('A').decode('爬取网页的charset')