1. 程式人生 > >python-urllib庫學習筆記

python-urllib庫學習筆記

import urllib.request, urllib.parse
'''
urllib常用的請求語句
'''
url = ''
# 傳送請求
res = urllib.request.urlopen(url=url)
# 讀取請求到的內容
res.read().decode('utf-8')
# 寫入檔案
with open('save_file.html', 'w', encoding='utf-8') as cp:
    cp.write(res.read())
# 傳送請求url含有中文需要進行編碼quote();解碼用unquote()
urllib.parse.quote(url)
# 下載儲存
urllib.request.urlretrieve(url=url, filename='baidu.html')
# 構建請求頭,不要帶-請求頭裡面'Accept-Encoding': 'gzip, deflate'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
# 構建一個高階請求物件需要新增請求頭 headers
req = urllib.request.Request(url=url, headers=headers)
# 傳送請求 timeout:請求時間超過1秒則放棄請求
urllib.request.urlopen(req, timeout=1)
'''
post請求需要增加data資料
'''
# 將要傳送的資料合成一個字典, 從網頁分析post中的formData資料
data = {
    'from': 'en',
    'to': 'zh',
}
# 對要傳送的資料進行打包
data = urllib.parse.urlencode(data).encode('utf-8')
# 請求體
req = urllib.request.Request(url=url, headers=headers, data=data)
'''
更高階的功能就要使用handler和opener,
步驟都是首先建立一個handler,然後建立一個opener,
然後通過opener的open方法來發送請求
'''
# 例項一個handle類
handler = urllib.request.HTTPHandler()
# 根據handle來建立一個opener
opener = urllib.request.build_opener(handler)
# 構建一個請求體
request = urllib.request.Request(url=url, headers=headers)
# 通過opener.open()傳送請求
opener.open(request)
'''
代理
'''
request = urllib.request.Request(url=url, headers=headers)
# 設定Proxyhandle代理
handler = urllib.request.ProxyHandler(proxies={'http':'101.236.21.22:8866'})
# 根據handle建立一個opener
opener = urllib.request.build_opener(handler)