开头

最近爬取百度贴吧搜索页的时候遇到一个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. loadrunner获取当前年月日时分秒 时间

    loadrunner获取当前年月日时分秒 时间 lr_save_datetime ("%Y-%m-%d %H:%M:%S",DATE_NOW+TIME_NOW,"crea ...

  2. 实验1.SDN拓扑实践

    实验1:SDN拓扑实践 一.基本要求 (一)Mininet运行结果截图 (二) 使用Mininet的命令行生成如下拓扑: 1. 3台交换机,每个交换机连接1台主机,3台交换机连接成一条线. 2. 3台 ...

  3. MySQL 索引的介绍

    参考:https://www.cnblogs.com/aspirant/p/9214485.html 参考:https://blog.codinglabs.org/articles/theory-of ...

  4. 操作kubernets(k8s)的增删改查

    资源的CRUD: 创建: Service service = client.services().inNamespace(namespace).create(service); 更新: Namespa ...

  5. python字符操作超全总结

    在python中,字符串是数据类型之一,属于不可变序列. 转义字符的使用 转义字符是指使用反斜杠"\"对一些特殊字符进行转义.几个常用的转义字符如下: \   -续行 \n -换行 ...

  6. 【OGF生成函数板子题】牛客编程巅峰赛S2第11场 C 挑选方案问题

    upd 2022-01-26 我找到了个题集 牛客竞赛数学专题班生成函数I(线性递推关系.生成函数概念与公式推导.暴力计算) 目录 题目链接 题面 解题思路 AC代码 题目链接 https://ac. ...

  7. 自己动手从零写桌面操作系统GrapeOS系列教程——21.汇编语言写硬盘实战

    学习操作系统原理最好的方法是自己写一个简单的操作系统. 在上一讲中我们学习了用汇编语言读硬盘,本讲我们来学习用汇编语言写硬盘.同样也是设计一个简单的实验,实验内容为: 在内存中准备一段有特征的512字 ...

  8. Clion 连接 WSL 编译Unix环境

    Clion 连接 WSL 编译Unix环境 安装 WSL Ubuntu 18版本,创建后不要换源,upgrade后安装CMake.g++.gcc 安装 Clion,创建项目 进入setting 在 B ...

  9. flutter util---->常用的一些工具方法

    copy text to clipboard Clipboard.setData(ClipboardData(text: string)); since Flutter1.9, you can use ...

  10. 记录关于Chromium系浏览器密码安全问题的一些思考

    首先就是在此之前就看到有相关报道讲到Chrome等浏览器密码都在本地明文存储,而且权限要求很低,任何程序都可以随意读取,这方面的安全问题暂且不表. 今天使用Edge时候发现浏览器储存的密码,在我已经设 ...