python 如何用urllib與服務(wù)端交互(發(fā)送和接收數(shù)據(jù))
urllib是Python3中內(nèi)置的HTTP請求庫,不需要單獨安裝,官方文檔鏈接如下:https://docs.python.org/3/library/urllib.html從官方文檔可以看出,urllib包含4個模塊,如圖所示。
這4個模塊的功能描述如下:
- request:最基本的HTTP請求模塊,可以用來發(fā)送HTTP請求,并接收服務(wù)端的響應(yīng)數(shù)據(jù)。這個過程就像在瀏覽器地址欄輸入URL,然后按Enter鍵一樣。
- error:異常處理模塊,如果出現(xiàn)請求錯誤,我們可以捕獲這些異常,然后根據(jù)實際情況,或者進行重試,或者直接忽略,或進行其他操作。
- parse:工具模塊,提供了很多處理URL的API,如拆分、解析、合并等。
- robotparser:主要用來識別網(wǎng)站的robots.txt文件,然后判斷哪些網(wǎng)站可以抓取,哪些網(wǎng)站不可以抓取。
本文主要介紹如何通過urllib發(fā)送HTTP GET請求和HTTP POST請求,并獲取相應(yīng)數(shù)據(jù)。
1. 用urlopen函數(shù)發(fā)送HTTP GET請求
urllib最基本的一個功能就是向服務(wù)端發(fā)送HTTP請求,然后接收服務(wù)端返回的響應(yīng)數(shù)據(jù)。這個功能只需要通過urlopen函數(shù)就可以搞定。例如,下面的代碼向百度發(fā)送HTTP GET請求,然后輸出服務(wù)端的響應(yīng)結(jié)果。
import urllib.request response=urllib.request.urlopen('https://baidu.com') # 將服務(wù)端的響應(yīng)數(shù)據(jù)用utf-8解碼 print(response.read().decode('utf-8'))
運行結(jié)果如圖 所示。
我們可以看到,使用urllib與服務(wù)端交互是非常容易的,除了import語句外,真正與業(yè)務(wù)有關(guān)的代碼只有2行,就完成了整個與服務(wù)端交互的過程。其實這個過程已經(jīng)完成了爬蟲的第一步,就是從服務(wù)端獲取HTML代碼,然后就可以利用各種分析庫對HTML代碼進行解析,提取出我們感興趣的URL、文本、圖像等。其實urlopen函數(shù)返回的是一個對象,而read是這個對象的一個方法,可以利用type方法輸出這個對象的類型,當我們知道了對象類型后,就可以很容易知道這個對象中有哪些API,然后調(diào)用它們。
import urllib.request response=urllib.request.urlopen('https://baidu.com') print(type(response))
這段代碼會輸出如下的結(jié)果:
<class 'http.client.HTTPResponse'>
現(xiàn)在我們了解到,urlopen函數(shù)返回的是HTTPResponse類型的對象,主要包含read、getheader、getheaders等方法,以及msg、version、status、debuglevel、closed等屬性。下面是一個實際的案例,用來演示了HTTPResponse對象中主要的方法和屬性的用法。
import urllib.request # 向京東商城發(fā)送HTTP GET請求,urlopen函數(shù)即可以使用http,也可以使用https response=urllib.request.urlopen('https://www.jd.com') # 輸出urlopen函數(shù)返回值的數(shù)據(jù)類型 print('response的類型:',type(response)) # 輸出響應(yīng)狀態(tài)碼、響應(yīng)消息和HTTP版本 print('status:',response.status,' msg:',response.msg,' version:', response.version) # 輸出所有的響應(yīng)頭信息 print('headers:',response.getheaders()) # 輸出名為Content-Type的響應(yīng)頭信息 print('headers.Content-Type',response.getheader('Content-Type')) # 輸出京東商城首頁所有的HTML代碼(經(jīng)過utf-8解碼) print(response.read().decode('utf-8'))
運行結(jié)果如圖所示。
2. 用urlopen函數(shù)發(fā)送HTTP POST請求
urlopen函數(shù)默認情況下發(fā)送的是HTTP GET請求,如果要發(fā)送HTTP POST請求,需要使用data命名參數(shù),該參數(shù)是bytes類型,需要用bytes類將字符串形式的數(shù)據(jù)轉(zhuǎn)換為bytes類型。下面的例子
下面的例子向http://httpbin.org/post發(fā)送HTTP POST請求,并輸出返回結(jié)果。
import urllib.request # 將表單數(shù)據(jù)轉(zhuǎn)換為bytes類型,用utf-8編碼 data=bytes(urllib.parse.urlencode({'name':'Bill','age':30}),encoding='utf-8') # 提交HTTP POST請求 response=urllib.request.urlopen('http://httpbin.org/post',data=data) # 輸出響應(yīng)數(shù)據(jù) print(response.read().decode('utf-8'))
這段代碼中一開始提供了一個字典形式的表單數(shù)據(jù),然后使用urlencode方法將字典類型的表單轉(zhuǎn)換為字符串形式的表單,接下來將字符串形式的表單按utf-8編碼轉(zhuǎn)換為bytes類型,這就是要傳給urlopen函數(shù)的data命名參數(shù)的值,要注意,一旦指定了data命名參數(shù),urlopen函數(shù)就會向服務(wù)端提交HTTP POST請求,這里并不需要顯式指定要提交的是POST請求。
本例將HTTP POST請求提交給了http://httpbin.org/post,這是一個用于測試HTTP POST請求的網(wǎng)址,如果請求成功,服務(wù)端會將HTTP POST請求信息原封不動地返回給客戶端。運行結(jié)果如圖所示。
以上就是python 如何用urllib與服務(wù)端交互(發(fā)送和接收數(shù)據(jù))的詳細內(nèi)容,更多關(guān)于python 用urllib與服務(wù)端交互的資料請關(guān)注腳本之家其它相關(guān)文章!
- Python中高效的json對比庫deepdiff詳解
- python處理json文件的四個常用函數(shù)
- 使用python如何提取JSON數(shù)據(jù)指定內(nèi)容
- python如何讀取和存儲dict()與.json格式文件
- 利用python實現(xiàn)JSON文檔與Python對象互相轉(zhuǎn)換
- python+html實現(xiàn)前后端數(shù)據(jù)交互界面顯示的全過程
- python tkinter與Mysql數(shù)據(jù)庫交互實現(xiàn)賬號登陸
- Python與數(shù)據(jù)庫的交互問題小結(jié)
- python實現(xiàn)與Oracle數(shù)據(jù)庫交互操作示例
- python GUI庫圖形界面開發(fā)之PyQt5中QWebEngineView內(nèi)嵌網(wǎng)頁與Python的數(shù)據(jù)交互傳參詳細方法實例
- python與json數(shù)據(jù)的交互詳情
相關(guān)文章
將string類型的數(shù)據(jù)類型轉(zhuǎn)換為spark rdd時報錯的解決方法
今天小編就為大家分享一篇關(guān)于將string類型的數(shù)據(jù)類型轉(zhuǎn)換為spark rdd時報錯的解決方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02Python中輸入若干整數(shù)以逗號間隔實現(xiàn)統(tǒng)計每個整數(shù)出現(xiàn)次數(shù)
這篇文章主要介紹了Python中輸入若干整數(shù)以逗號間隔實現(xiàn)統(tǒng)計每個整數(shù)出現(xiàn)次數(shù)的相關(guān)資料,需要的小伙伴可以參考一下,希望對你有所幫助2022-04-04python3.7.3版本和django2.2.3版本是否可以兼容
在本篇文章里小編給大家整理的是一篇關(guān)于python3.7.3版本和django2.2.3版本是否可以兼容的相關(guān)知識點內(nèi)容,有興趣的朋友們可以學習下。2020-09-09python網(wǎng)絡(luò)編程學習筆記(八):XML生成與解析(DOM、ElementTree)
DOM是Document Object Model的簡稱,XML 文檔的高級樹型表示。該模型并非只針對 Python,而是一種普通XML 模型。Python 的 DOM 包是基于 SAX 構(gòu)建的,并且包括在 Python 2.0 的標準 XML 支持里2014-06-06Python函數(shù)調(diào)用的幾種方式(類里面,類之間,類外面)
本文主要介紹了Python函數(shù)調(diào)用的幾種方式(類里面,類之間,類外面),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07Python對Excel不同的行分別復制不同的次數(shù)
這篇文章主要介紹了如何利用Python實現(xiàn)讀取Excel表格文件數(shù)據(jù),并將其中符合我們特定要求的那一行加以復制指定的次數(shù),感興趣的小伙伴可以學習一下2023-07-07