国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

python 如何用urllib與服務端交互(發(fā)送和接收數(shù)據(jù))

瀏覽:3日期:2022-06-26 13:17:54

urllib是Python3中內置的HTTP請求庫,不需要單獨安裝,官方文檔鏈接如下:https://docs.python.org/3/library/urllib.html從官方文檔可以看出,urllib包含4個模塊,如圖所示。

python 如何用urllib與服務端交互(發(fā)送和接收數(shù)據(jù))

這4個模塊的功能描述如下:

request:最基本的HTTP請求模塊,可以用來發(fā)送HTTP請求,并接收服務端的響應數(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請求,并獲取相應數(shù)據(jù)。

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

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

import urllib.request response=urllib.request.urlopen(’https://baidu.com’) # 將服務端的響應數(shù)據(jù)用utf-8解碼 print(response.read().decode(’utf-8’))

運行結果如圖 所示。

python 如何用urllib與服務端交互(發(fā)送和接收數(shù)據(jù))

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

import urllib.request response=urllib.request.urlopen(’https://baidu.com’) print(type(response))

這段代碼會輸出如下的結果:

<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)) # 輸出響應狀態(tài)碼、響應消息和HTTP版本 print(’status:’,response.status,’ msg:’,response.msg,’ version:’, response.version) # 輸出所有的響應頭信息 print(’headers:’,response.getheaders()) # 輸出名為Content-Type的響應頭信息 print(’headers.Content-Type’,response.getheader(’Content-Type’)) # 輸出京東商城首頁所有的HTML代碼(經(jīng)過utf-8解碼) print(response.read().decode(’utf-8’))

運行結果如圖所示。

python 如何用urllib與服務端交互(發(fā)送和接收數(shù)據(jù))

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

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

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

import urllib.request # 將表單數(shù)據(jù)轉換為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) # 輸出響應數(shù)據(jù) print(response.read().decode(’utf-8’))

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

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

python 如何用urllib與服務端交互(發(fā)送和接收數(shù)據(jù))

以上就是python 如何用urllib與服務端交互(發(fā)送和接收數(shù)據(jù))的詳細內容,更多關于python 用urllib與服務端交互的資料請關注好吧啦網(wǎng)其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 国产片一级 | 欧美大尺码毛片 | 欧美亚洲国产成人综合在线 | 美女视频永久黄网站在线观看 | 在线观看日本污污ww网站 | 国产手机免费视频 | 毛片免费在线观看 | 国产精品亚洲二区 | 91免费永久国产在线观看 | 久久久精品国产免费观看同学 | 亚洲国产福利精品一区二区 | 国产三级视频在线播放 | 久久91精品国产91久久小草 | 国产精自产拍久久久久久 | 日韩国产欧美在线观看一区二区 | 久久精品国产99国产精品免费看 | 99视频在线精品免费 | 久草成人在线视频 | 中文字幕在线观看一区二区 | 香焦视频在线观看黄 | 91视频国产一区 | 久久综合九九 | 国产精品18久久久久久vr | 久久精品视频8 | 中国美女一级看片 | 成人国产精品高清在线观看 | 欧美成人性做爰 | 国产高清在线视频 | 99久久免费精品视频 | 国产成人精品男人的天堂网站 | 18年大片免费在线观看 | 一本色道久久88加勒比—综合 | 亚洲综合国产一区在线 | 欧美日韩亚洲国产精品 | 欧美日韩国产一区二区三区播放 | 99精品这里只有精品高清视频 | 中文字幕日韩一区二区 | 亚洲欧美日韩精品久久亚洲区色播 | 美女张开腿让人桶 | 欧美一区二区视频在线观看 | 亚洲欧美精品一中文字幕 |