官網地址:Requests: HTTP for Humandocs.python-requests.org
安裝方法:pip install requests
測試1:import requests r = requests.get('www.baidu.com')
Requests庫的7個主要方法:html
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.request(method,url,**kwargs)
kwargs
:控制訪問的參數,均爲可選項python
1.params
:字典或者字節序列,做爲參數增長到URL中json
>>> kv = {'key1':'value1','key2':'value2'} >>> r = requests.request("GET",'http://python123.io/ws',params=kv) >>> print(r.url) https://python123.io/ws?key1=value1&key2=value2
2.data
:字典、字節序列或文件對象,做爲Request的內容服務器
>>> kv = {'key1':'value1','key2':'value2'} >>> r = requests.request('POST','http://python123.io/ws',data=kv) >>> body = "python" >>> r = requests.request('POST','http://python123.io/ws',data=body)
3.JSON
:JSON格式的數據,做爲Request的內容cookie
>>> kv = {'key1':'value1'} >>> r = requests.request('POST','http://python123.io/ws',json=kv)
4.headers
:字典,HTTP定製頭網絡
>>> hd = {'user-agent':'Chrome/10'} >>> r = requests.request('POST','http://python123.io/ws',headers=hd)
5.cookies
:字典或CookieJar,Request中的cookie
6.auth
:元祖,支持HTTP認證功能
7.files
:字典類型,傳輸文件app
>>> fs = {'file':open('data.xls','rb')} >>> r = requests.request('POST','http://python123.io/ws',files=fs)
8.timeout
:設定超時時間,秒爲單位>>> r = requests.request("GET",'http://www.baidu.com',timeout=10)
9.proxies
:字典類型,設定訪問代理服務器,能夠增長登陸認證框架
pxs = {'http':'http://user:pass@10.10.10.1:1234','https':'https://10.10.10.1:4321'} r = requests.request('GET','http://www.baidu.com',proxies = pxs)
10.allow_redirects
:True
/False
,默認爲True
,重定向開關
11.stream
:True
/False
,默認爲True
,獲取內容當即下載開關
12.verify
:True
/False
,默認爲True
,認證SSL證書開關
13.cert
:保存本地SSL證書路徑dom
requests.get()
方法使用:r = requests.get(url,params=None,**kwargs)
url
:頁面的URL連接params
:URL中的額外參數,字典或者字節流格式**kwargs
:12個控制訪問的參數
其餘requests方法的使用和requests.request方法同樣post
Response對象的屬性r = requests.get(url)
構造一個向服務器請求資源的Request對象,返回一個Response對象。
\>>> import requests \>>> r = requests.get("(http://www.baidu.com/)") \>>> print(r.status_code) 200 \>>> type(r) <class 'requests.models.Response'> \>>> r.headers {'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html', 'Date': 'Tue, 11 Feb 2020 04:26:11 GMT', 'Last-Modified': 'Mon, 23 Jan 2017 13:27:56 GMT', 'Pragma': 'no-cache', 'Server': 'bfe/1.0.8.18', 'Set-Cookie': 'BDORZ=27315; max-age=86400; [domain=.baidu.com](http://domain=.baidu.com/); path=/', 'Transfer-Encoding': 'chunked'}
屬性 | 說明 |
---|---|
r.status_code |
HTTP請求的返回狀態,200表示鏈接成功,404表示失敗 |
r.text |
HTTP相應內容的字符串形式,即URL對應的頁面內容 |
r.encoding |
從HTTP header中猜想的響應內容編碼方式 |
r.apparent_encoding |
從內容中分析出的響應內容編碼方式(備選編碼方式) |
r.content |
HTTP響應內容的二進制形式 |
編碼很重要:若是網頁編碼方式是ISO-8895-1
,那麼用r.text
查看的是亂碼。r.encoding
只是分析網頁的頭部,猜想編碼方式,而r.apparent_encoding
則是實實在在根據網頁內容分析編碼方式。因此,在爬蟲程序中,常常使用r.encoding = r.apparent_encoding
,來直接獲取網頁的編碼。
爬取網頁的通用代碼框架:
異常 | 說明 |
---|---|
requests.ConnectionError |
網絡鏈接錯誤異常,如DNS查詢失敗、拒絕鏈接等 |
requests.HTTPError |
HTTP錯誤異常 |
requests.URLRequired |
URL缺失異常 |
requests.TooManyRedirects |
超過最大重定向次數,產生重定向異常 |
requests.ConnectTimeout |
鏈接遠程服務器超時異常 |
requests.Timeout |
請求URL超時,產生超時異常 |
Response異常的捕捉
異常 | 說明 |
---|---|
r.raise_for_status() |
若是不是200,產生異常requests.HTTPError |
通用代碼框架以下:
import requests def getHTMLText(url): try: r = requests.get(url,timeout = 30) #30秒超時異常 r.raise_for_status()#若是r返回的狀態不是200,則引起HTTPError異常 r.encoding = r.apparent_encoding return r.text except: return "產生異常" if __name__ == "__main__": url = "http://www.baidu.com" print(getHTMLText(url))
錯誤測試:
>>> u = "http://b.com" >>> print(getHTMLText(u)) 產生異常
HTTP協議---超文本傳輸協議,請求響應、無狀態的模式
URL格式 http://host[:port][path]
host
:合法的Internet主機域名或者IP地址[:port]
:端口號,缺省端口爲80[path]
:請求資源的路徑
HTTP協議對資源的操做
方法 | 說明 |
---|---|
GET | 請求獲取URL位置的資源 |
HEAD | 請求獲取URL位置資源的響應消息報告,即得到該資源的頭部信息 |
POST | 請求向URL位置的資源後附加新的數據 |
PUT | 請求向URL位置存儲一個資源,覆蓋原URL位置的資源 |
PATCH | 請求局部更新URL位置的資源,即改變該處資源的部分內容 |
DELETE | 請求刪除URL位置存儲的資源 |
Requests庫的方法與HTTP協議是一一對應的