python-urllib庫學習筆記
阿新 • • 發佈:2019-01-25
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)