专业编程基础技术教程

网站首页 > 基础教程 正文

Urllib.parse编码模块(urlcode编码)

ccvgpt 2024-07-23 01:34:07 基础教程 13 ℃

简单举例子:比如我们在百度搜索男篮球星易建联的时候,出现的网址是这样的:

https://www.baidu.com/s?wd=易建联&ie=utf-8&tn=02003390_69_hao_pg

Urllib.parse编码模块(urlcode编码)

可是当我们把这个网址复制粘贴在某一个txt文档里面的时候,就出现下面的情况

https://www.baidu.com/s?wd=%E6%98%93%E5%BB%BA%E8%81%94&ie=utf-8&tn=02003390_69_hao_pg

易建联变成了一堆上面的编码,也就是说当我们浏览器向url地址发请求的时候,他会自动把url地址里面的中文给编码成上面的格式;他才可以发给服务器,才能够得到正确的响应.

那么就有一个问题,在浏览器里面可以 自动的编码解码,在我们编写的程序里,没有人可以给我们编码解码,所以说我们需要手动编.

因此就引出了我们今天所说的urllib.parse模块,他的主要作用就是对url地址里面的中文进行编码.

导入方式两种:

1:import urllib.parse

2:from urllib import parse

示例:

编码前:https://www.baidu.com/s?wd=易建联

编码后:https://www.baidu.com/s?wd=%E6%98%93%E5%BB%BA%E8%81%94

编码方法:

urlencode()方法:给url地址中查询参数进行编码,参数类型为字典;

示例:

编码前:params={wd:美女}

编码中:params=urllib.parse.urlencode(params)

编码后:params={wd:%E6%98%93%E5%BB%BA%E8%81%94}


此时我们只是对易建联进行了编码,但是url的地址还没有变化,我们需要给url拼接以下

拼接如下:

我们还有其他的拼接方式:

url='https://www.baidu.com/s?'+params1
print(url)
url='https://www.baidu.com/s?%s' % params1
print(url)
url='https://www.baidu.com/s?{}'.format(params1)
print(url)

简单做个作业:百度中输入要搜索的内容,把响应内容输入到本地文件

import urllib.parse
from urllib import request
#1拼接url地址
word=input('请输入要查询的内容:')
params=urllib.parse.urlencode({'wd':word})
print(params)
url='https://www.baidu.com/s?{}'.format(params)
print(url)
#2 发请求,获取响应内容
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1'}
req=request.Request(url=url,headers=headers)
res=request.urlopen(req)
html=res.read().decode()
print(html)
#3 保存到本地文件
filename=word+'.html'
with open(filename,'w',encoding='utf-8') as f:
    f.write(html)

urllib的第二种方法

urllib.parse.quote('参数为字符串')编码

作用:对url地址中的中文进行编码,类似于urlencode方法

params=parase.quote('易建联')

url='https://www.baidu.com/s?wd'+params

两个注意事项:

1:采用quote方法,编码的时候就不再需要wd了!

2:但是在拼接URL的时候,wd一定要记得带上!!

Tags:

最近发表
标签列表