日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python requests库作用_python Requests库入门

發(fā)布時(shí)間:2023/12/19 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python requests库作用_python Requests库入门 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。