开头

最近爬取百度贴吧搜索页的时候遇到一个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. 总结Unity查找物体的几种方法

    Unity中经常需要查找对象,对应的API也有好几种,各自有不同的适用场合. 1. GameObject.Find 通过名字或路径查找游戏对象. GameObject.Find("GameO ...

  2. Rust for Rustaceans: Idomatic Programming for Experienced Developers Chap.2 Types

    翻译的内容如果有不理解的地方或者是其他的差错,欢迎后台回复讨论. 类型在内存中的表示 Rust中的每一个值都有自己的类型(Type).在这一章中,我们将会看到Rust中的类型服务于许多不同的目的,但其 ...

  3. 【BUUCTF】强网杯 2019随便注1 write up

    输入万能密码1' or 1=1# ,判断存在sql注入, SQL注入的万能密码实际上是利用了网址后台的漏洞,打开下面的网址不用密码和账号也可以登录后台. 万能密码原理: 万能密码能够绕过sql检测,在 ...

  4. DVWA-SQL Injection(SQL注入)

    sql注入是典型.常见的Web漏洞之一,现在在网络中也可能存在,不过大多数为SQL盲注. 攻击者通过恶意的SQL语句来破坏SQL查询语句,达到数据库泄露的目的 LOW 审计源码 <?php // ...

  5. Less1-union select 联合查询注入

    在学习之前,我们要知道,什么是 SQL 注入? 一句话来说,攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的. SQL注入漏洞的危害是很大的,常常会导致整个数 ...

  6. Android笔记--外部存储空间

    存储文件的操作 外部存储空间 私有存储空间和公共存储空间 外部存储空间分为私有+公有 保存文件到外部存储空间的相关代码操作: 私有空间: 公有空间: 记得增加权限(Android_Manifest.x ...

  7. Python通过ssh登录实现报文监听

    Python自动化ssh登录目标主机,实现报文长度length 0监听,并根据反馈信息弹窗报警: 代码比较简陋,后续记得优化改进. #_*_coding:utf-8 _*_ #!/usr/bin/py ...

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

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

  9. Vue中使用axios发起POST请求成功,却被挂起

    服务器能接收请求并处理,控制台没有报错,axios().catch也没有捕获异常.随后查看控制台网络页,发现被挂起 在Stack搜到同问题,上面说将axios()函数返回用.then查看被挂起信息.n ...

  10. Nmap学习

    Nmap学习 一.主机发现 1.全面扫描/综合扫描 nmap -A 192.168.142.201 2.Ping扫描 nmap -sP 192.168.142.0/24 3.免Ping扫描,穿透防火墙 ...