天天看點

【Python_urllib學習筆記(二)】urllib.parse 子產品的基本用法

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)