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