requests庫是比urllib更加方便實用的http第三方庫,它支援http連線保持和連線池,支援使用cookie保持會話,支援檔案上傳,支援自動響應內容的編碼,支援國際化的url和post資料自動編碼。
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。
1.requests.get()方法
作用:
該方法構造乙個向伺服器請求資源的request物件,並返回乙個包含伺服器資源的response物件。
語法格式:
requests.get(url,params=
none
,**kwargs)
params是url中的額外引數,kwargs表示控制訪問的引數,它有很多,接下來會在用到的時候再做介紹。
注意:
get()方法實際上是用request()方法來封裝,這對其它諸如post、delete等方法同樣適用。即requests庫中這七個方法,除了request()這個基礎方法之外,其它方法的實現都是通過呼叫request()方法來完成的。
呼叫get()方法,實際上內****的:
def
get(url,params=
none
,**kwargs)
:"""sends a get request.
......
......
"""kwargs.setdefault(
'allow_redirects'
,true
)return request(
'get'
,url,params=
none
,**kwargs)
response物件的屬性(設response物件為r):
r.status_code #http請求的返回狀態,200表示成功,404表示失敗
r.text #http請求內容的字串形式
r.content #http請求內容的二進位制形式
r.encoding #從http header中猜測的響應內容編碼方式
encoding是從http header中猜測出的相應內容編碼方式,它可能與html響應內容不相容。該屬性由http頭中的charset屬性指定,如果http header中指定了該屬性,那麼說明該伺服器對它的資源編碼是有要求的,即採用charset指定的編碼。如果header中未指定charset欄位,那麼預設編碼是iso-8859-1,該編碼並不能解析中文。
2.requests.request()方法
語法格式:
requests.request(method,url,
**kwargs)
介紹request()方法主要是想把它的kwargs可選引數說明一下,request()方法知道了,其它方法其實也就不用再介紹了。
其它方法一覽:
requests.get(url,params=none,**kwargs) requests.head(url,**kwargs)requests.post(url,data=none,json=none,**kwargs)
requests.put(url,data=none,**kwargs)
requests.patch(url,data=none,**kwargs) requests.delete(url,**kwargs)
requests.connectionerror:網路連線錯誤異常,如dns查詢失敗、拒絕連線等。requests.httperror:http錯誤異常。
requests.urlrequired:url缺失異常。
requests.toomanyredirects:超過最大重定向次數,產生重定向異常。
requests.connecttimeout:連線遠端伺服器超時異常。
requests.timeout:請求url超時異常。
我們要爬取乙個url,利用get()方法之後會得到乙個response物件。response物件包含了我們要爬取的網頁內的所有資訊,因此,學會對response物件進行處理是很重要的。
response物件有乙個比較特殊的方法,即raise_for_status()方法,呼叫該方法後,當狀態碼不是200時會產生requests.httperror異常,通過檢測該異常並派和異常處理語句,爬取網頁的過程就會更加穩定高效。
爬取網頁的通用**框架:
import requests
defgethtmltext
(url)
:try
: r = requests.get(url,timeout=30)
r.raise_for_status(
)#如果不是200,產生的httperror異常將被expect捕捉
return r.text
except
:return
"產生異常!"
if __name__ ==
'__main__'
: url =
''print
(gethtmltext(url)
)
之前在http協議的那篇部落格中只介紹了get、post和head方法,其它的沒有提及,這裡簡單的介紹一下。
http協議對網路資源提供了六種操作方法,分別是:
get:請求獲取url位置上的資源。你可以把url看成是和你的計算機上的檔案路徑一樣的東西,只不過本地檔案路徑是讓你找到你的計算機上的資源,而url是幫助找到在網際網路中的資源。head:請求獲取url位置上的資源的響應頭資訊。
post:請求向url位置上的資源後附加新的資料。
put:請求在url位置上儲存乙個新資源,新資源將覆蓋原url位置的資源。
patch:請求區域性更新url位置上的資源。
delete:請求刪除url位置上的資源。
關於post方法:
用post方法提交字典資料的話,會被儲存在網頁的from欄位中。
用post方法提交普通資料的話,會被儲存在網頁的data欄位中。
requests模組的入門使用
requests模組的入門使用 目標掌握requests傳送請求的方法 掌握response物件的基礎屬性 掌握requests傳送帶headers的請求 掌握requests模組傳送帶引數請求 為什麼要重點學習requests模組,而不是urllib requests的底層實現就是urllib r...
爬蟲之requests模組的入門使用
為什麼要重點學習requests模組,而不是urllib requests的底層實現就是urllib requests在python2 和python3中通用,方法完全一樣 requests簡單易用 requests能夠自動幫助我們解壓 gzip壓縮的等 網頁內容 requests模組傳送簡單的ge...
Python模組之requests模組
requests python標準庫中提供了 urllib等模組以供http請求,但是,它的 api 太渣了。它是為另乙個時代 另乙個網際網路所建立的。它需要巨量的工作,甚至包括各種方法覆蓋,來完成最簡單的任務。import urllib.request f urllib.request.urlop...