日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
【Python爬蟲實(shí)戰(zhàn)】用urllib與服務(wù)端交互(發(fā)送和接收數(shù)據(jù))

urllib是Python3中內(nèi)置的HTTP請(qǐng)求庫(kù),不需要單獨(dú)安裝,官方文檔鏈接如下:https://docs.python.org/3/library/urllib.html從官方文檔可以看出,urllib包含4個(gè)模塊,如圖1所示。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了渭南免費(fèi)建站歡迎大家使用!

圖1 urllib官方文檔目錄

這4個(gè)模塊的功能描述如下:

  • request:最基本的HTTP請(qǐng)求模塊,可以用來發(fā)送HTTP請(qǐng)求,并接收服務(wù)端的響應(yīng)數(shù)據(jù)。這個(gè)過程就像在瀏覽器地址欄輸入U(xiǎn)RL,然后按Enter鍵一樣。
  • error:異常處理模塊,如果出現(xiàn)請(qǐng)求錯(cuò)誤,我們可以捕獲這些異常,然后根據(jù)實(shí)際情況,或者進(jìn)行重試,或者直接忽略,或進(jìn)行其他操作。
  • parse:工具模塊,提供了很多處理URL的API,如拆分、解析、合并等。
  • robotparser:主要用來識(shí)別網(wǎng)站的robots.txt文件,然后判斷哪些網(wǎng)站可以抓取,哪些網(wǎng)站不可以抓取。

本文主要介紹如何通過urllib發(fā)送HTTP GET請(qǐng)求和HTTP POST請(qǐng)求,并獲取相應(yīng)數(shù)據(jù)。

1. 用urlopen函數(shù)發(fā)送HTTP GET請(qǐng)求

urllib最基本的一個(gè)功能就是向服務(wù)端發(fā)送HTTP請(qǐng)求,然后接收服務(wù)端返回的響應(yīng)數(shù)據(jù)。這個(gè)功能只需要通過urlopen函數(shù)就可以搞定。例如,下面的代碼向百度發(fā)送HTTP GET請(qǐng)求,然后輸出服務(wù)端的響應(yīng)結(jié)果。

 
 
 
 
  1. import urllib.request 
  2. response=urllib.request.urlopen('https://baidu.com') 
  3. # 將服務(wù)端的響應(yīng)數(shù)據(jù)用utf-8解碼 
  4. print(response.read().decode('utf-8')) 

運(yùn)行結(jié)果如圖2所示。

圖2 百度首頁(yè)的HTML代碼

我們可以看到,使用urllib與服務(wù)端交互是非常容易的,除了import語句外,真正與業(yè)務(wù)有關(guān)的代碼只有2行,就完成了整個(gè)與服務(wù)端交互的過程。其實(shí)這個(gè)過程已經(jīng)完成了爬蟲的第一步,就是從服務(wù)端獲取HTML代碼,然后就可以利用各種分析庫(kù)對(duì)HTML代碼進(jìn)行解析,提取出我們感興趣的URL、文本、圖像等。其實(shí)urlopen函數(shù)返回的是一個(gè)對(duì)象,而read是這個(gè)對(duì)象的一個(gè)方法,可以利用type方法輸出這個(gè)對(duì)象的類型,當(dāng)我們知道了對(duì)象類型后,就可以很容易知道這個(gè)對(duì)象中有哪些API,然后調(diào)用它們。

 
 
 
 
  1. import urllib.request 
  2. response=urllib.request.urlopen('https://baidu.com') 
  3. print(type(response)) 

這段代碼會(huì)輸出如下的結(jié)果:

 
 
 
 
  1.  

現(xiàn)在我們了解到,urlopen函數(shù)返回的是HTTPResponse類型的對(duì)象,主要包含read、getheader、getheaders等方法,以及msg、version、status、debuglevel、closed等屬性。下面是一個(gè)實(shí)際的案例,用來演示了HTTPResponse對(duì)象中主要的方法和屬性的用法。

 
 
 
 
  1. import urllib.request 
  2. # 向京東商城發(fā)送HTTP GET請(qǐng)求,urlopen函數(shù)即可以使用http,也可以使用https 
  3. response=urllib.request.urlopen('https://www.jd.com') 
  4. # 輸出urlopen函數(shù)返回值的數(shù)據(jù)類型 
  5. print('response的類型:',type(response)) 
  6. # 輸出響應(yīng)狀態(tài)碼、響應(yīng)消息和HTTP版本 
  7. print('status:',response.status,' msg:',response.msg,' version:', response.version) 
  8. # 輸出所有的響應(yīng)頭信息 
  9. print('headers:',response.getheaders()) 
  10. # 輸出名為Content-Type的響應(yīng)頭信息 
  11. print('headers.Content-Type',response.getheader('Content-Type')) 
  12. # 輸出京東商城首頁(yè)所有的HTML代碼(經(jīng)過utf-8解碼) 
  13. print(response.read().decode('utf-8')) 

運(yùn)行結(jié)果如圖3所示。

圖3 HTTPResponse對(duì)象的API演示

2. 用urlopen函數(shù)發(fā)送HTTP POST請(qǐng)求

urlopen函數(shù)默認(rèn)情況下發(fā)送的是HTTP GET請(qǐng)求,如果要發(fā)送HTTP POST請(qǐng)求,需要使用data命名參數(shù),該參數(shù)是bytes類型,需要用bytes類將字符串形式的數(shù)據(jù)轉(zhuǎn)換為bytes類型。下面的例子

下面的例子向http://httpbin.org/post發(fā)送HTTP POST請(qǐng)求,并輸出返回結(jié)果。

 
 
 
 
  1. import urllib.request 
  2. # 將表單數(shù)據(jù)轉(zhuǎn)換為bytes類型,用utf-8編碼 
  3. data=bytes(urllib.parse.urlencode({'name':'Bill','age':30}),encoding='utf-8') 
  4. # 提交HTTP POST請(qǐng)求 
  5. response=urllib.request.urlopen('http://httpbin.org/post',data=data) 
  6. # 輸出響應(yīng)數(shù)據(jù) 
  7. print(response.read().decode('utf-8')) 

這段代碼中一開始提供了一個(gè)字典形式的表單數(shù)據(jù),然后使用urlencode方法將字典類型的表單轉(zhuǎn)換為字符串形式的表單,接下來將字符串形式的表單按utf-8編碼轉(zhuǎn)換為bytes類型,這就是要傳給urlopen函數(shù)的data命名參數(shù)的值,要注意,一旦指定了data命名參數(shù),urlopen函數(shù)就會(huì)向服務(wù)端提交HTTP POST請(qǐng)求,這里并不需要顯式指定要提交的是POST請(qǐng)求。

本例將HTTP POST請(qǐng)求提交給了http://httpbin.org/post,這是一個(gè)用于測(cè)試HTTP POST請(qǐng)求的網(wǎng)址,如果請(qǐng)求成功,服務(wù)端會(huì)將HTTP POST請(qǐng)求信息原封不動(dòng)地返回給客戶端。運(yùn)行結(jié)果如圖4所示。

圖4 HTTP POST請(qǐng)求信息

 本文轉(zhuǎn)載自微信公眾號(hào)「極客起源」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系極客起源公眾號(hào)。


網(wǎng)站標(biāo)題:【Python爬蟲實(shí)戰(zhàn)】用urllib與服務(wù)端交互(發(fā)送和接收數(shù)據(jù))
網(wǎng)站URL:http://www.dlmjj.cn/article/coshdgg.html