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编码和解码,最近在学习汇编,相信之后从硬件的角度会对编码解码这方面有更深的理解!

python en(de)code的更多相关文章

  1. Converting Python Virtual Machine Code to C

    Converting Python Virtual Machine Code to C

  2. Python on VS Code

    install python extension Press F1, and input "ext install python". Then the icon at the le ...

  3. python 调用 C++ code

    本文以实例code讲解python 调用 C++的方法. 1. 如果没有参数传递从python传递至C++,python调用C++的最简单方法是将函数声明为C可用函数,然后作为C code被pytho ...

  4. Pycharm创建Django项目显示python non-zero exit code(1)错误

    好久时间没有做Django的项目了,今天创建项目竟然报Non-zero exit code(1)错误 查明原因是因为pip不是最新版本,需要执行以下命令:python -m pip install - ...

  5. python单线程爬虫code

    广度优先算法: # -*- coding: utf-8 -*- import urllib import urllib.request from bs4 import BeautifulSoup im ...

  6. python shopping incomplete code

    #shopping code#shopping.py#导入登录模块import login# shop car beginningsalary = input("请输入工资:\t" ...

  7. facebook视频上传python 返回错误code:100,'type':OAuthException

    首先重新获取访问口令token: https://developers.facebook.com/tools/debug/accesstoken/?q=EAAYDuzyd3eYBAK9lZCErZBl ...

  8. python参数Sample Code

    import time import datetime import getopt import sys try: opts, args = getopt.getopt(sys.argv[1:], & ...

  9. Python with VS Code

    1. 基本的代码结构为: 2.

随机推荐

  1. Python Scrapy的QQ音乐爬虫 音乐下载、爬取歌曲信息、歌词、精彩评论

    QQ音乐爬虫(with scrapy)/QQ Music Spider UPDATE 2019.12.23 已实现对QQ音乐文件的下载,出于版权考虑,不对此部分代码进行公开.此项目仅作为学习交流使用, ...

  2. 201709-1 打酱油 Java

    思路: 先看能不能买5瓶,因为送的最多,然后看能不能买3瓶,最后一瓶一瓶地买 import java.util.Scanner; public class Main { public static v ...

  3. ftp主动和被动模式区别

    转载自:http://www.west999.com/cms/wiki/server/2018-11-16/49417.html FTP是基于TCP的服务的,FTP不同之处在于FTP使用两个端口,一个 ...

  4. Mybatis之二级缓存(八)

    1. 介绍 Mybatis缓存分为一级缓存和二级缓存,在本节中我们介绍下二级缓存的使用及其特性 MyBatis的一级缓存是在一个Session域内有效的,当Session关闭后,缓存内容也随之销毁.但 ...

  5. 普通java项目转换为带有Tomcat的动态Web项目

    原文链接:http://blog.csdn.net/l4432321/article/details/52049125 直接项目右键进入Properties配置,点击Project Facets,再点 ...

  6. 报错:不是GROUP BY 表达式

    oracle库中:group by后面必须加上你select后面所查询的所有除聚合函数之外的所有字段. 解决方法:将group by放入子查询中使用或者将select后面的所有查询字段放入group ...

  7. Android开发—错误记录1:W/System.err: java.net.ConnectException: Connection refused

    W/System.err: java.net.ConnectException: Connection refused 前台访问后台时,出现访问被拒绝情况:W/System.err: java.net ...

  8. 在storyboard中给控制器添加导航栏控制器和标签控制器

    1.选中目标控制器 2.选择xcode的工具栏中的"Editor"->"Embed in"->"Navigation Controller ...

  9. 201403-2 窗口 Java

    要想到定义一个窗口类,判断点在不在矩形里好判断 需要一个数组,存放结果 import java.util.ArrayList; import java.util.List; import java.u ...

  10. UML-逻辑架构和包图-概述

    回顾前几章学习了用例模型,本章开始学习设计模型.