开头

最近爬取百度贴吧搜索页的时候遇到一个url的编码问题,颇为头疼,记录下来防止下次忘记

工具网站

解码编码的工具网站推荐 http://tool.chinaz.com/tools/urlencode.aspx

网址分析

当我们打开百度贴吧首页输入关键字并进行全吧搜索的时候,就会得到一个返回的url

https://tieba.baidu.com/f/search/res?isnew=1&kw=&qw=%BA%FE%C8%CB&rn=10&un=&only_thread=0&sm=1&sd=&ed=&pn=3 # 这个url拿到工具网站解析的时候,并不会返回结果

这个坑我查了很久,一直都解码不成功,直到问了同事,同事说这个是 gb2312 的 url编码!

人傻了,马上试试

果然成功了! 学到,原来url编码也分 gb2312 和 utf-8 的

代码应用

既然知道了这个Url是由 gb2312 编码之后再 url 编码生成的url,那这样在程序中怎么写呢?

需要用到 urllib.parse 这个函数

urllib.parse 里面三个方法:urlencode、quote 和 unquote, 分别对于编码与解码

对字符串进行urlencode编码,就需要用到两个方法urlencode和quote

#!/usr/bin/python3
# coding=utf-8 from urllib.parse import urlencode
payload = {
"name": "中文",
"who": "lages",
"url": "UrlEncode编码"
}
print(urlencode(payload))

运行之后 可以得到一个url编码的键值对

quote方法能对字符串编码,如下:

#!/usr/bin/python3
# coding=utf-8 from urllib.parse import quote print(quote("湖人"))
url = "http://www.baidu.com/?a=湖人&b=sitven"
print(quote(url))

这样,得到的整个url都编码了,而我们一般只需要中文编码就好

知道上面两个方法,还有python自带的字符串解码就可以得到这样做

kw = '湖人'
kw = quote(kw.encode('gb2312')) # 先通过字符串编码为gb2312,然后编码为url
url = f"https://tieba.baidu.com/f/search/res?isnew=1&kw=&qw={qw}&" # 最后组合成一个url

问题解决之后,想着url编码怎么才可以解码成utf-8呢,就要用到 unquote 方法了。类似于%E4%B5%B7&b=E6%82%A0这种格式, 可通过unquote方法解码

unquote方法解码,

#!/usr/bin/python3
# coding=utf-8 from urllib.parse import unquote
import requests url = "http://httpbin.org/get"
payload = {
"city": "洛杉矶",
"site": "测试"
} r = requests.get(url, params=payload)
print(r.url) # http://httpbin.org/get?city=%E6%B4%9B%E6%9D%89%E7%9F%B6&site=%E6%B5%8B%E8%AF%95
print(unquote(r.url)) # http://httpbin.org/get?city=洛杉矶&site=测试

完。

python中的一些解码和编码的更多相关文章

  1. 【转】Python中的字符串与字符编码

    [转]Python中的字符串与字符编码 本节内容: 前言 相关概念 Python中的默认编码 Python2与Python3中对字符串的支持 字符编码转换 一.前言 Python中的字符编码是个老生常 ...

  2. Python中的字符串与字符编码

    本节内容: 前言 相关概念 Python中的默认编码 Python2与Python3中对字符串的支持 字符编码转换 一.前言 Python中的字符编码是个老生常谈的话题,同行们都写过很多这方面的文章. ...

  3. Python中文本文件读写操作的编码问题

    Python中文本文件读写的编码问题 编码(encode): 我们输入的任何字符想要以文件(如.txt)的形式保存在计算机的硬盘上, 必须先经按照一定的规则编成计算机认识的二进制后,才能存在电脑硬盘上 ...

  4. JavaScript中URL的解码和编码

    这些URI方法encodeURI.encodeURIComponent().decodeURI().decodeURIComponent()代替了BOM的escape()和unescape()方法. ...

  5. python中的注释,输入输出和编码及文件

    1.单行注释 以井号( # )开头,右边的所有内容当做说明2.多行注释 以三对单引号(’’’注释内容’’’)将注释包含起来以‘# ’是注释的标识符,可以记录当前代码所代表的意义,解释器会自动忽略这部分 ...

  6. Python中的解决中文字符编码的问题

    python3中str默认为Unicode的编码格式 python2中str默认为bytes类型的编码格式 Unicode是一32位编码格式,不适合用来传输和存储,所以必须转换成utf-8,gbk等等 ...

  7. python中的编解码小结

    在用python27写文件或者上传文件时遇到这样一个问题:.在网上搜了下说加入以下三行代码可以解决: import sys reload(sys) sys.setdefaultencoding('ut ...

  8. python中的system函数与编码

    在调用os.system执行命令时,发现system不能接受unicode的命令.那么命令中却又包含以unicode表示的中文等字符怎么办? ——方法就是将unicode转化为utf8 path = ...

  9. python中的字符串编码问题——1.理解编码和解码问题

    理解编码与解码(python2.7):1)编码 是根据一个想要的编码名称,把一个字符串翻译为其原始字节形式.>>> u_str=u'字符串编码aabbbcccddd'>> ...

  10. 字符、字符集、编码,以及它们python中会遇到的一些问题(下)

    在看了很多的博客文章之后,总结整理得到了以下文章,非常感谢这些无私奉献的博主! 文章末尾有本文引用的文章的链接,如果有漏掉的文章引用,可以发邮件联系我,随后再次附上链接! 侵删!!! 这一部分是下篇, ...

随机推荐

  1. Caused by: java.lang.NoClassDefFoundError: net/minidev/asm/FieldFilter 报错的解决

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'r ...

  2. 使用 ww.cad 完成dwg文件转shp(包含所有属性)

    单纯使用ArcEngine提供的接口读取dwg数据转shp存在众多属性无法读取的情况(最直观的 南方cass生产的dwg文件有SOUTH这一字段,为目标要素的类型) private void Conv ...

  3. AssetBuddle(一)

    一·含义 一个压缩文件,针对于特定平台的资产压缩包.资产包括模型,贴图,预制体,音效,材质球等,注意不包括c#脚本. 二·作用 相对于resource文件夹下面的东西打包后定死只读,无法修改. AB包 ...

  4. 05-Spring的AOP编程之基于注解开发

    Spring的AOP基于注解的开发 首先在AOP配置文件中,开启注解的aop开发 <aop:aspectj-autoproxy></aop:aspectj-autoproxy> ...

  5. leetcode-1072 Flip Columns For Maximum Number of Equal Rows

    Given a matrix consisting of 0s and 1s, we may choose any number of columns in the matrix and flip e ...

  6. 一个.Net Core开源缓存中间件,让你更加简单、方便使用缓存

    上次给大家推荐过一个缓存中间件<一个C#开发的非常实用的缓存中间件>,今天再给大家推荐一个缓存中间件,两者功能差不多,都是提供统一接口.多级缓存.分布式缓存.支持多种Provider等. ...

  7. 干货 | BitSail Connector 开发详解系列一:Source

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 BitSail 是字节跳动自研的数据集成产品,支持多种异构数据源间的数据同步,并提供离线.实时.全量.增量场景下全 ...

  8. Resistance distance 图上2个节点的等效电阻求解算法

    目录 如何计算正方体网络中(乃至更一般的图)2个节点间的等效电阻? 公式的正确性很容易得到验证 如何计算Weighted matrix的Resistance matrix 我验证了特例,是对的,但是对 ...

  9. 【绘制分形图案】多重收缩打印机(MRCM)举例

    note 2020-08-05搬运 下面的内容来自我的CSDN博客 多重收缩打印机(MRCM)是生成分形图案的一种方法.主要思想还是多次迭代.   每次都是将上一次的输出拿来做线性仿射变换后重新组合在 ...

  10. RSA 简介及 C# 和 js 实现【加密知多少系列】

    〇.简介 谈及 RSA 加密算法,我们就需要先了解下这两个专业名词,对称加密和非对称加密. 对称加密:在同一密钥的加持下,发送方将未加密的原文,通过算法加密成密文:相对的接收方通过算法将密文解密出来原 ...