zoukankan      html  css  js  c++  java
  • python en(de)code

    python爬虫

    代码写挺长的,也是边学边写,但一直搞不清楚python的encode(编码)和decode(解码)。以下是我的探究之路。

    一、当然先看官方文档

    地址如下

    里面提到encode函数‘Return an encoded version of the string as a bytes object.’就是将字符串进行编码,返回得到bytes类型对象,

    而decode函数正好相反,是将bytes解码为字符串类型。

    二、实际操作一下

    直接以爬虫代码为例:

    1
    2
    response=requests.get(BASE_DOMAIN, headers=HEADERS)
    print(response.text)

    run一下之后会发现很多乱码

    查了一下发现问题处在.text上,.text是返回网页的相应数据,并按照机器认为的最大可能去解码比如utf-8。而观察本站发现’charset=gb2312’所以出现了乱码。于是,

    我用encoding规定用gb2312解码:

    1
    2
    3
    4
    response=requests.get(BASE_DOMAIN, headers=HEADERS)

    response.encoding="gb2312"
    print(response.text)

    果然解决了乱码问题,但这和 大专栏  python en(de)codeencode,decode没啥关系。。。

    接下来就有关系了。

    我换了一种方式:

    1
    2
    3

    response=requests.get(BASE_DOMAIN, headers=HEADERS)
    print(response.content)

    发现爬到的是bytes类型,意识到.content返回的数据是不进行解码的,又由于是由bytes到字符串的解码,所以使用decode()

    1
    2
    response=requests.get(BASE_DOMAIN, headers=HEADERS)
    print(response.content.decode('gb2312'))

    一运行,woc!报错了

    说是gb2312不能解码,这不矛盾吗…

    于是赶紧上网查了一下发现gbk的解码范围包含了gb2312,于是尝试改为gbk,问题解决,成功解码~

    这只是用了decode(),那再作死一下把解码的再编码回来,走你:

    1
    2
    3
    response=requests.get(BASE_DOMAIN, headers=HEADERS)
    r=response.content.decode('gbk')
    print(r.encode('gbk'))

    成功编码~

    经过了这次的探索尝试,搞明白了Python编码和解码,最近在学习汇编,相信之后从硬件的角度会对编码解码这方面有更深的理解!

  • 相关阅读:
    数组-11. 猴子选大王
    *数组-10. 求整数序列中出现次数最多的数
    数组-07. 求一批整数中出现最多的个位数字
    *数组-05. 字符串字母大小写转换
    数组-04. 查找整数
    《结对-网页贪吃蛇-最终程序》
    Forward团队-爬虫豆瓣top250项目-项目进度
    《结对-HTML贪吃蛇游戏项目-测试过程》
    课后作业-阅读任务-阅读提问-2
    《20171005-构建之法:现代软件工程-阅读笔记》
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12370998.html
Copyright © 2011-2022 走看看