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)
注意:使用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)
最對中文部分進行編碼,需要手動拼接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)
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)