1.urllib.parse.urlencode()方法:
一般HTTP請求提交數(shù)據(jù)鸳惯,需要編碼成 URL編碼格式,然后做為url的一部分,或者作為參數(shù)傳到Request對象中.
這時可以使用urllib.parse模塊下的urlencode()函數(shù),幫我們將key:value這樣的鍵值對轉(zhuǎn)換"key=value"這樣的字符串职员,解碼工作可以使用urllib.parse的unquote()函數(shù)蹄咖。
例如獲取百度美女貼吧的url
import urllib.parse
url = "http://tieba.baidu.com/f?"
key = urllib.parse.urlencode({"kw" : "美女"})
url = url + key
組合后的url示例:http://tieba.baidu.com/f?kw=%E7%BE%8E%E5%A5%B3
2.urllib.request()
快速爬取一個網(wǎng)頁
import urllib.request
url = 'http://www.baidu.com/'
response = urllib.request.urlopen(url)
html = response.read()
with open('baidu/baidu.html','w') as f:
f.write(html.decode())
f.close()
3.urllib高級用法一,自定義opener
基本的urlopen()方法不支持代理巧婶、cookie等其他的HTTP/HTTPS高級功能
簡單的自定義opener()
import urllib.request
url = 'http://www.baidu.com'
https_handler = urllib.request.HTTPHandler()
opener = urllib.request.build_opener(https_handler)
request = urllib.request.Request(url=url)
response = opener.open(request)
content = response.read().decode()
with open('baidu.html','w') as f:
f.write(content)
4.urllib高級用法二,設(shè)置代理
基本原理: 代理實際上指的就是代理服務(wù)器贪染,英文叫作proxy server越走,它的功能是代理網(wǎng)絡(luò)用戶去取得網(wǎng)絡(luò)信息棚品。形象地說,它是網(wǎng)絡(luò)信息的中轉(zhuǎn)站廊敌。在我們正常請求一個網(wǎng)站時铜跑,其實是發(fā)送了請求給Web服務(wù)器,Web服務(wù)器把響應(yīng)傳回給我們骡澈。如果設(shè)置了代理服務(wù)器锅纺,實際上就是在本機和服務(wù)器之間搭建了一個橋,此時本機不是直接向Web服務(wù)器發(fā)起請求肋殴,而是向代理服務(wù)器發(fā)出請求囤锉,請求會發(fā)送給代理服務(wù)器,然后由代理服務(wù)器再發(fā)送給Web服務(wù)器护锤,接著由代理服務(wù)器再把Web服務(wù)器返回的響應(yīng)轉(zhuǎn)發(fā)給本機官地。這樣我們同樣可以正常訪問網(wǎng)頁,但這個過程中Web服務(wù)器識別出的真實IP就不再是我們本機的IP了烙懦,就成功實現(xiàn)了IP偽裝驱入,這就是代理的基本原理
import urllib.request
import urllib.parse
西刺免費代理IP:http://www.xicidaili.com/
快代理免費代理:https://www.kuaidaili.com/free/inha/
proxy = {
'http':'61.176.223.7:58822',
'https':'180.121.135.91:3128'
}
url = 'http://www.baidu.com'
創(chuàng)建處理代理的handler
proxyhandler = urllib.request.ProxyHandler(
proxies=proxy
)
創(chuàng)建一個opener
opener = urllib.request.build_opener(proxyhandler)
構(gòu)造一個請求
request = urllib.request.Request(url=url)
response = opener.open(request)
content = response.read().decode()
with open('daili.html','w') as f:
f.write(content)