此篇文章中介绍urllib库中parse 模块的基本用法,包括查询参数编码、编码后字符串进行解码等。
parse模块的作用是操纵url地址及其各组成部分,实现url的识别和分段。
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()方法编码后会自动对多个查询参数间添加”&“符号
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
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)
百度
模拟 百度搜索关键字,保存 “关键字.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)