当前位置: 首页 > 工具软件 > ParseHTML > 使用案例 >

【Python_urllib学习笔记(二)】urllib.parse 模块的基本用法

杨凯旋
2023-12-01

urllib.parse 模块的基本用法

前言

此篇文章中介绍urllib库中parse 模块的基本用法,包括查询参数编码、编码后字符串进行解码等。

正文

1、parse模块

parse模块的作用是操纵url地址及其各组成部分,实现url的识别和分段。

1.1 urllib.parse.urlencode()方法

parse.urlencode()方法 : 查询参数必须在编码后才能加入url地址,parse.urlencode()方法的作用就是对url地址中查询参数进行编码,参数类型为字典。
应用实例1:
对查询参数"百度"进行编码

from urllib import parse
paras = parse.urlencode({"wd": "百度"})
url = "http://www.baidu.com/s?" + paras
print(url)
http://www.baidu.com/s?wd=%E7%99%BE%E5%BA%A6

应用实例2:
如果url地址中如果有多个查询参数

from urllib import parse
paras = parse.urlencode({"wd": "百度", "pn": "10"})
url = "http://www.baidu.com/s?%s" % paras1
print(url)
http://www.baidu.com/s?wd=%E7%99%BE%E5%BA%A6&pn=10

注意:使用parse.urlencode()方法编码后会自动对多个查询参数间添加”&“符号

1.2 urllib.parse.quote()方法

parse.quote()方法 : 对url地址中的中文进行编码,类似于urlencode()方法。
应用实例:
对查询参数"百度"进行编码

from urllib import parse
paras=parse.quote("百度")
url = "http://www.baidu.com/s?wd={}&pn={}".format(paras,2)
print(url)
http://www.baidu.com/s?wd=%E7%99%BE%E5%BA%A6&pn=2

最对中文部分进行编码,需要手动拼接url地址,下面简单介绍下拼接字符串的三种方式。

拼接url地址的三种方式:
1、字符串相加

paras=parse.quote("百度")
url="http://www.baidu.com/s?" + paras
http://www.baidu.com/s?wd=%E7%99%BE%E5%BA%A6

2、字符串格式化

paras=parse.quote("百度")
url = "http://www.baidu.com/s?%s" % paras
http://www.baidu.com/s?wd=%E7%99%BE%E5%BA%A6

3、字符串的format()方法

paras=parse.quote("百度")
url = "http://www.baidu.com/s?{}}".format(paras)
http://www.baidu.com/s?wd=%E7%99%BE%E5%BA%A6&pn=2

1.3 urllib.parse.unquote()方法

parse.unquote()方法 : 有了quote()方法转换,也需要有unquote()方法对url地址进行解码,作用是将编码后的字符串转为普通的Unicode字符串。
应用实例:
对编码后的字符串"%E7%99%BE%E5%BA%A6"进行解码

from urllib import parse
paras = "%E7%99%BE%E5%BA%A6"
result = parse.unquote(paras)
print(result)
百度

2、parse模块的实际应用示例

模拟 百度搜索关键字,保存 “关键字.html” 到本地
流程:
1、拼接url地址
2、发请求获取响应内容
3、保存到本地文件
具体代码:

from urllib import parse, request
# 1、拼接url地址
word = input("请输入百度搜索的关键字:") # 用户输入查询关键字
params = parse.urlencode({"wd": word}) # 对 输入的关键字进行编码
url = "http://www.baidu.com/s?{}".format(params) # url地址拼接
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko)"} # 包装请求头

# 2、发请求获取响应内容
req = request.Request(url=url, headers=headers) # 构造请求对象
res = request.urlopen(req) # 获取响应对象
html = res.read().decode() # 获取响应内容

# 3、保存到本地文件
filename = word + ".html" # 定义文件名称
with open(filename, 'w', encoding="utf-8") as f: # 保存文件到本地
    f.write(html)
 类似资料: