python中的一些解码和编码
开头
最近爬取百度贴吧搜索页的时候遇到一个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中的一些解码和编码的更多相关文章
- 【转】Python中的字符串与字符编码
[转]Python中的字符串与字符编码 本节内容: 前言 相关概念 Python中的默认编码 Python2与Python3中对字符串的支持 字符编码转换 一.前言 Python中的字符编码是个老生常 ...
- Python中的字符串与字符编码
本节内容: 前言 相关概念 Python中的默认编码 Python2与Python3中对字符串的支持 字符编码转换 一.前言 Python中的字符编码是个老生常谈的话题,同行们都写过很多这方面的文章. ...
- Python中文本文件读写操作的编码问题
Python中文本文件读写的编码问题 编码(encode): 我们输入的任何字符想要以文件(如.txt)的形式保存在计算机的硬盘上, 必须先经按照一定的规则编成计算机认识的二进制后,才能存在电脑硬盘上 ...
- JavaScript中URL的解码和编码
这些URI方法encodeURI.encodeURIComponent().decodeURI().decodeURIComponent()代替了BOM的escape()和unescape()方法. ...
- python中的注释,输入输出和编码及文件
1.单行注释 以井号( # )开头,右边的所有内容当做说明2.多行注释 以三对单引号(’’’注释内容’’’)将注释包含起来以‘# ’是注释的标识符,可以记录当前代码所代表的意义,解释器会自动忽略这部分 ...
- Python中的解决中文字符编码的问题
python3中str默认为Unicode的编码格式 python2中str默认为bytes类型的编码格式 Unicode是一32位编码格式,不适合用来传输和存储,所以必须转换成utf-8,gbk等等 ...
- python中的编解码小结
在用python27写文件或者上传文件时遇到这样一个问题:.在网上搜了下说加入以下三行代码可以解决: import sys reload(sys) sys.setdefaultencoding('ut ...
- python中的system函数与编码
在调用os.system执行命令时,发现system不能接受unicode的命令.那么命令中却又包含以unicode表示的中文等字符怎么办? ——方法就是将unicode转化为utf8 path = ...
- python中的字符串编码问题——1.理解编码和解码问题
理解编码与解码(python2.7):1)编码 是根据一个想要的编码名称,把一个字符串翻译为其原始字节形式.>>> u_str=u'字符串编码aabbbcccddd'>> ...
- 字符、字符集、编码,以及它们python中会遇到的一些问题(下)
在看了很多的博客文章之后,总结整理得到了以下文章,非常感谢这些无私奉献的博主! 文章末尾有本文引用的文章的链接,如果有漏掉的文章引用,可以发邮件联系我,随后再次附上链接! 侵删!!! 这一部分是下篇, ...
随机推荐
- HTML笔记(一) HTML相关概念
一 HTML概述 1.HTML文档基本结构 先来看一个关于HTML的例子,里面包含了几个主要的HTML标签: <!DOCTYPE html> <html> <head&g ...
- java 转换指定文件夹文件编码工具
import java.io.*; public class test { public static void main(String[] args) { printFiles(new File(& ...
- 安装单机版k8s
1.配置yum源,博主使用华为的镜像源 选择不同的系统版本下载使用: 2.安装etcd,kubernetes yum -y install etcd kubernetes 3.修改kubernetes ...
- Promise和await、同步和异步
1.同步和异步是什么: ①同步:同步是指如果一个进程在执行某个请求的时候,如果该请求需要等待一段时间,那么该进程会一直等待下去,直到收到返回信息才继续执行下去 ②异步: 指一个请求在执行某个请 ...
- Ubuntu 20.24 安装Postgresql 14
1.运行环境 WSL+Ubuntu 20.04 2.安装Postgresql 进入Linux命令行,参照Postgresql官网安装指南 # Create the file repositor ...
- Jquery中,$(this)的少许获取问题
这是原始代码,结果为解禁提示框中$(this)获取不到当前元素. 如上图,在提示方法外面声明一下$(this)并赋给$this,下面调用$this,即可获取当前元素.
- 声网自研传输层协议 AUT 的落地实践丨Dev for Dev 专栏
本文为「Dev for Dev 专栏」系列内容,作者为声网大后端传输协议负责人 夏天. 针对实时互动应用对网络传输带来的新需求和新挑战,声网通过将实时互动中的应用层业务需求与传输策略的分层和解耦,于 ...
- 当基础设施故障后,声网 SD-RTN™ 如何保障 RTE 服务的高可用性
云计算的出现为企业的管理.业务开展.资源整合等带来了极大的便利性,也是数字化建设的核心基建之一,然而局部宕机或者大面积宕机事件对于云厂商来说却也无法避免,全球领先的计算平台也不例外.例如,美国东部时间 ...
- 制作微软原版Windows11 PE(含Powershell)
1.adksetup下载链接:https://download.microsoft.com/download/1/f/d/1fd2291e-c0e9-4ae0-beae-fbbe0fe41a5a/ad ...
- RPC通信原理概述
RPC通信原理概述 1.RPC概述 1.什么是RPC RPC(Remote Procedure Call Protocol)远程过程调用协议.它是一种通过网络从远程计算机程序上请求服务,而不需要了解底 ...