python requests库作用_python Requests库入门
一、Requests 庫(kù)的安裝
對(duì)Requests庫(kù) 了解更多請(qǐng)移步:http://www.python-requests.org
安裝操作:
win平臺(tái):“以管理員身份運(yùn)行” cmd ,執(zhí)行 pip install requests
測(cè)試安裝是否成功:
>>> import requests
>>> r=requests.get('http://www.baidu.com')
>>> print(r.status_code)
200
二、Requests 庫(kù)的7個(gè)主要方法
requests.request() 構(gòu)造一個(gè)請(qǐng)求,支撐以下各方法的基礎(chǔ)方法
requests.get() 獲取HTML網(wǎng)頁(yè)的主要方法,對(duì)應(yīng)HTTP的GET
requests.head() 獲取HTML網(wǎng)頁(yè)頭信息的方法,對(duì)應(yīng)HTTP的HEAD
requests.post() 向HTML網(wǎng)頁(yè)提交POST請(qǐng)求的方法,對(duì)應(yīng)HTTP的POST
requests.put() 向HTML網(wǎng)頁(yè)提交PUT請(qǐng)求的方法,對(duì)應(yīng)HTTP的PUT
requests.patch() 向HTML網(wǎng)頁(yè)提交局部修改請(qǐng)求,對(duì)應(yīng)于HTTP的PATCH
requests.delete()向HTML頁(yè)面提交刪除請(qǐng)求,對(duì)應(yīng)于HTTP的DELETE
【最常用方法】requests.get()
Response = requests.get(url)
#requests.get(url) 構(gòu)造一個(gè)向服務(wù)器請(qǐng)求資源的Request對(duì)象
#Response 返回一個(gè)包含服務(wù)器資源的Response對(duì)象。是爬蟲(chóng)返回的全部?jī)?nèi)容
三、Response 對(duì)象的屬性:
r.status_code HTTP請(qǐng)求的返回狀態(tài),200表示連接成功,404表示失敗(只要不是200,返回的請(qǐng)求都是失敗的)
r.text HTTP響應(yīng)內(nèi)容的字符串形式,即,url對(duì)應(yīng)的頁(yè)面內(nèi)容
r.encoding 從HTTP header中猜測(cè)的響應(yīng)內(nèi)容編碼方式
r.apparent_encoding 從內(nèi)容中分析出的響應(yīng)內(nèi)容編碼方式(備選編碼方式)
r.content HTTP響應(yīng)內(nèi)容的二進(jìn)制形式
例子:在使用requests.get()方法獲取網(wǎng)上資源的時(shí)候,有一個(gè)基本的流程:首先用?r.status_code來(lái)檢查返回的?Response 對(duì)象的狀態(tài)。如果是200,就使用?r.encoding ?r.apparent_encoding ?r.content 等去解析返回的內(nèi)容。如果返回的狀態(tài)碼是 404或者其他,那就說(shuō)明這次url的訪問(wèn)由于某種原因出錯(cuò)了或產(chǎn)生異常。
>>> import requests
>>> r=requests.get('http://www.baidu.com')
>>> print(r.status_code)
200
>>> r.text #內(nèi)容中很多都是亂碼,看不清它的內(nèi)容是什么?
'href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css>
?x99??o|??x80??x8b?>>> r.encoding #接下來(lái)查看一下,它從的HTTP header中猜測(cè)的編碼是什么?
'ISO-8859-1'
>>> r.apparent_encoding #再查一下(備選編碼),它從從內(nèi)容中分析出的編碼是什么?
'utf-8'
>>> r.encoding = 'utf-8' #用備選編碼 替換r.encoding的編碼
>>> r.text #此時(shí)就能發(fā)現(xiàn),有中文的字符
'href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css>
百度一下,你就知道注解: 簡(jiǎn)單說(shuō)網(wǎng)絡(luò)上的資源均有它的編碼,如果沒(méi)有編碼,我們將沒(méi)辦法用有效的解析方式使得人類(lèi)對(duì)信息可讀。?r.encoding是從HTTP header 中的 charset 字段中獲得的,如果HTTP header 中有這樣一個(gè)字段,說(shuō)明我們?cè)L問(wèn)的服務(wù)器對(duì)它資源的編碼是有要求的,而這樣的編碼會(huì)獲得回來(lái),存在?r.encoding中。但是,并不是所有的服務(wù)器對(duì)它的資源編碼都是有相關(guān)要求,所以,如果當(dāng)HTTP header 中不存在 charset 字段,我們將默認(rèn)編碼設(shè)為 ISO-8859-1,但這樣的編碼并不能解析中文。 ? 繼而,Requests庫(kù) 提供了另外一個(gè) 備選編碼?r.apparent_encoding,其根據(jù)HTTP的內(nèi)容部分,去分析內(nèi)容中出現(xiàn)文本可能的編碼形式,而不是從HTTP header頭部分。原則來(lái)說(shuō)此編碼更加準(zhǔn)確。
(一)爬取網(wǎng)頁(yè)的通用代碼框架
通用代碼框架就是一組代碼,它可以準(zhǔn)確的可靠的爬取網(wǎng)頁(yè)上的內(nèi)容。我們?cè)谟肦equests庫(kù)進(jìn)行網(wǎng)頁(yè)訪問(wèn)的時(shí)候,經(jīng)常用到 requests.get()函數(shù),但由于網(wǎng)絡(luò)連接有風(fēng)險(xiǎn),所以它的異常處理很重要
理解 Response= requests.get(url) 函數(shù),Response的異常處理:
異常 說(shuō)明
requests.ConnectionError 網(wǎng)絡(luò)連接錯(cuò)誤異常,如DNS查詢失敗、拒絕連接等
requests.HTTPError HTTP錯(cuò)誤異常
requests.URLRequired URL缺失異常
requests.TooManyRedirects 超過(guò)最大重定向次數(shù),產(chǎn)生重定向異常
requests.ConnectTimeout 連接遠(yuǎn)程服務(wù)器超時(shí)異常
requests.Timeout 請(qǐng)求URL超時(shí),產(chǎn)生超時(shí)異常
注解:Response對(duì)象返回了所有的網(wǎng)頁(yè)內(nèi)容,同時(shí)也提供了r.raise_for_status()方法
r.raise_for_status()
此方法是專(zhuān)門(mén)與異常打交道,它的內(nèi)部判斷 r.status_code 是否等于200?
如果是200,它將表示返回的內(nèi)容是正確的。
如果不是200,它將產(chǎn)生一個(gè)HTTPError的異常.
例子:通用代碼框架
import requests
def getHTMLText(url):
try:
r = requests.get(url,timeout=30)
r.raise_for_status() #如果狀態(tài)不是200,引發(fā)HTTPError異常
r.encoding = r.apparent_encoding
return r.text
except:
return'產(chǎn)生異常'
if _name_=='_main_':
url = 'http://www.baidu.com'
print(getHTMLText(url))
使用此方法,不需要增加額外的if語(yǔ)句,該語(yǔ)句便于利用try‐except進(jìn)行異常處理。
這樣一個(gè)通用代碼框架可以有效地處理我們?cè)谠L問(wèn)或爬取網(wǎng)頁(yè)過(guò)程中,可能出現(xiàn)的一些錯(cuò)誤或網(wǎng)絡(luò)不穩(wěn)定造成的現(xiàn)象。
通過(guò)代碼框架實(shí)際上它最大的作用,是能夠使得用戶訪問(wèn)或爬取網(wǎng)頁(yè)變得更有效、更穩(wěn)定、更可靠。
(二)HTTP協(xié)議 及 Requests庫(kù)方法
HTTP(Hypertext Transfer Protocol)超文本傳輸協(xié)議。是一個(gè)基于“請(qǐng)求與響應(yīng)”模式的、無(wú)狀態(tài)的應(yīng)用層協(xié)議。
簡(jiǎn)單說(shuō),用戶發(fā)一些請(qǐng)求,服務(wù)器做相關(guān)響應(yīng),這就是請(qǐng)求與響應(yīng)的模式。無(wú)狀態(tài),是指第一次請(qǐng)求與第二次請(qǐng)求之間并沒(méi)有相關(guān)的關(guān)聯(lián),應(yīng)用層協(xié)議,指該協(xié)議工作在TTP協(xié)議之上。
HTTP協(xié)議采用URL作為定位網(wǎng)絡(luò)資源的標(biāo)識(shí),URL是通過(guò)HTTP協(xié)議存取資源的Internet路徑,一個(gè)URL對(duì)應(yīng)一個(gè)數(shù)據(jù)資源。格式如下:
http://host[:port][path] ? 例如:http://www.bit.edu.cn? 或者 http://220.181.111.188/duty
host 合法的Internet主機(jī)域名或IP地址
port? 端口號(hào),缺省端口為80(可省略)
path? 請(qǐng)求資源在主機(jī)或IP地址的服務(wù)器上,它所包含的內(nèi)部路徑
HTTP協(xié)議對(duì)資源的操作
方法 說(shuō)明
GET 請(qǐng)求獲取URL位置的資源
HEAD 請(qǐng)求獲取URL位置資源的響應(yīng)消息報(bào)告,即獲得該資源的頭部信息
POST 請(qǐng)求向URL位置的資源后附加新的數(shù)據(jù)
PUT 請(qǐng)求向URL位置存儲(chǔ)一個(gè)資源,覆蓋原URL位置的資源
PATCH 請(qǐng)求局部更新URL位置的資源,即改變?cè)撎庂Y源的部分內(nèi)容
DELETE 請(qǐng)求刪除URL位置存儲(chǔ)的資源
(三)詳解Requests 庫(kù)的7個(gè)主要方法
【方法1】requests.request(method,url,**kwargs)
method :請(qǐng)求方式,7種GET / HEAD / POST / PUT / PATCH / delete / OPTIONS
url ? ? ? :擬獲取頁(yè)面的url鏈接
**kwargs:13個(gè)控制訪問(wèn)的參數(shù) ,分別如下 ↓
params :字典或字節(jié)序列,作為參數(shù)增加到url中
data ? ?? :字典、字節(jié)序列或文件對(duì)象,作為Request的內(nèi)容
json ? ? ? :JSON格式的數(shù)據(jù),作為Request的內(nèi)容
headers :字典,HTTP定制頭
cookies? :字典或CookieJar,Request中的cookie
auth ? ? ? :元組,支持HTTP認(rèn)證功能
files ? ? ?? :字典類(lèi)型,傳輸文件
timeout? :設(shè)定超時(shí)時(shí)間,秒為單位
proxies? :字典類(lèi)型,設(shè)定訪問(wèn)代理服務(wù)器,可以增加登錄認(rèn)證
allow_redirects:True / False,默認(rèn)為T(mén)rue,重定向開(kāi)關(guān)
stream ? :True / False,默認(rèn)為T(mén)rue,獲取內(nèi)容立即下載開(kāi)關(guān)
verify ? ? :True / False,默認(rèn)為T(mén)rue,認(rèn)證SSL證書(shū)開(kāi)關(guān)
cert ? ? ? :本地SSL證書(shū)路徑
【方法2】requests.get(url,params=None,**kwargs)
url? ? ? :擬獲取頁(yè)面的url鏈接
params :url中的額外參數(shù),字典或字節(jié)流格式,可選
**kwargs:12個(gè)控制訪問(wèn)的參數(shù)
【方法3】requests.head(url,**kwargs)
url ? ? ?? :擬獲取頁(yè)面的url鏈接
**kwargs:12個(gè)控制訪問(wèn)的參數(shù)
【方法4】requests.post(url,data = None,json = None,**kwargs)
url ? ? ? ? :擬更新頁(yè)面的url鏈接
data ? ?? :字典、字節(jié)序列或文件,Request的內(nèi)容
json?? :JSON格式的數(shù)據(jù),Request的內(nèi)容
**kwargs:12個(gè)控制訪問(wèn)的參數(shù)
【方法5】requests.put(url,data = None,**kwargs)
url ? ? ? :擬更新頁(yè)面的url鏈接
data ?? :字典、字節(jié)序列或文件,Request的內(nèi)容
**kwargs:12個(gè)控制訪問(wèn)的參數(shù)
【方法6】requests.patch(url,data = None,**kwargs)
url ? ? ? ? :擬更新頁(yè)面的url鏈接
data?? :字典、字節(jié)序列或文件,Request的內(nèi)容
**kwargs:12個(gè)控制訪問(wèn)的參數(shù)
【方法7】requests.delete(url,**kwargs)
url ? ? ? ? :擬刪除頁(yè)面的url鏈接
**kwargs:12個(gè)控制訪問(wèn)的參數(shù)
內(nèi)容來(lái)源于網(wǎng)絡(luò)如有侵權(quán)請(qǐng)私信刪除
總結(jié)
以上是生活随笔為你收集整理的python requests库作用_python Requests库入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 仅次于美俄 中国航天员在轨时长超越日本成
- 下一篇: python 声明变量类型_每日一课 |