美文网首页
python爬虫中遇到的乱码问题

python爬虫中遇到的乱码问题

作者: 6e586345cd00 | 来源:发表于2020-05-13 13:41 被阅读0次

    一.问题背景

    最近因为做数据分析需要用到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解码。

    爬虫编码乱码解决思路:

    • 1.首先encoding一下response.text查看初始编码A
    • 2.将response.text用encode('A')转为bytes
    • 3.将转换完的代码继续用decode解码,解码用的编码是爬取的网页上的编码。即charset。
      代码:
    response.text.encode('A').decode('爬取网页的charset')
    

    四.参考网址

    相关文章

      网友评论

          本文标题:python爬虫中遇到的乱码问题

          本文链接:https://www.haomeiwen.com/subject/kirnnhtx.html