Python3中將python2.7的urllib和urllib2兩個(gè)包合并成了一個(gè)urllib庫
Python3中,urllib庫包含有四個(gè)模塊:
- urllib.request for opening and reading URLs
- urllib.error containing the exceptions raised by urllib.request
- urllib.parse for parsing URLs
- urllib.robotparser for parsing robots.txt files
urllib.request這個(gè)模塊用得比較多, 尤其是urlopen函數(shù),會返回一個(gè)二進(jìn)制的對象颗品,對這個(gè)對象進(jìn)行read()操作可以得到一個(gè)包含網(wǎng)頁的二進(jìn)制字符串薯演,然后用decode()解碼成一段html代碼:
語法結(jié)構(gòu):urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None, capath=None, cadefault=False, context=None)
參數(shù):其中url既可以是一個(gè)URL字符串,又可以是一個(gè)Request對象,一般使用后者添加其他參數(shù)。
當(dāng)request的方式是post時(shí),使用參數(shù)data,用于填寫傳遞的表單信息,將data填好表單信息,準(zhǔn)備傳入urlopen 前望忆,還需要利用urllib.parse里的urlencode()函數(shù)轉(zhuǎn)換格式,寫成data = urllib.parse.urlencode(data).encode(‘’),然后將data傳入函數(shù)竿秆。
而urllib.request的Request函數(shù)启摄,也可以用于打開url字符串,同時(shí)可以傳入更多的參數(shù)幽钢,例如:headers歉备,Request函數(shù)可以返回一個(gè)request對象作為urlopen函數(shù)的url參數(shù)使用。
語法結(jié)構(gòu):urllib.request. Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
參數(shù):其中url是一個(gè)URL字符串匪燕。
data用法與urlopen一致蕾羊。
headers參數(shù)是一個(gè)字典,服務(wù)器對于用戶發(fā)出的request帽驯,會通過其中的headers信息來判斷用戶發(fā)信息龟再,我們可以通過自己編寫headers傳入urllib.request. Request中用于偽裝自己的身份。Header中User-agent參數(shù)是判斷用戶身份界拦。另外通過設(shè)置代理可以改變用戶提交時(shí)的IP地址吸申。
使用代理:
步驟:
1.參數(shù)是一個(gè)字典{‘類型’:‘代理IP:端口號’}
proxy_support=urllib.request.ProxyHandler({‘類型’:‘代理IP:端口號’})
2.定制梗劫、創(chuàng)建一個(gè)opener
opener = urllib.request.build_opener(Proxy_support)
創(chuàng)建opener以后享甸,也可以在opener里添加一個(gè)User-agent,代碼如下:
opener.addheaders = [(‘’User_agent,’’)]
3a.安裝opener(這種方法將opener一勞永逸地安裝到系統(tǒng)中梳侨,每次訪問自動使用這個(gè)代理訪問)
urllib.request.install_opener(opener)
3b.調(diào)用opener(這種方法暫時(shí)使用代理進(jìn)行一次訪問)
opener.open(url)