码迷,mamicode.com
首页 > 编程语言 > 详细

python中的一些解码和编码

时间:2021-06-22 18:02:30      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:baidu   print   关键字   urlencode   sea   pre   usr   loading   同事   

开头

最近爬取百度贴吧搜索页的时候遇到一个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中的一些解码和编码

标签:baidu   print   关键字   urlencode   sea   pre   usr   loading   同事   

原文地址:https://www.cnblogs.com/c-keke/p/14916594.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!