網(wǎng)站建設(shè)制作汕頭北京seo網(wǎng)站優(yōu)化培訓(xùn)
目錄
Requests庫
7個主要方法
Requests庫的get()方法
Response對象的屬性
爬取網(wǎng)頁的通用代碼框架
????????理解requests庫的異常
HTTP協(xié)議及Requests庫方法
HTTP協(xié)議
HTTP協(xié)議采用URL作為定位網(wǎng)絡(luò)資源的標(biāo)識。
HTTP協(xié)議對資源的操作
理解PATCH和PUT的區(qū)別
HTTP協(xié)議與Requsets庫
Requests庫主要方法解析
requests.requst()
Requests庫
>>> import requests# 獲取網(wǎng)頁
>>> r = requests.get("http://www.baidu.com")# 獲取網(wǎng)頁狀態(tài)碼,200表示成功
>>> print(r.status_code)
200>>> type(r)
<class 'requests.models.Response'>>>> r.headers
{'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, ection': 'Keep-Alive', 'Transfer-Encoding': 'chunked', 'Server':}
7個主要方法
方法 | 說明 |
---|---|
requests.requst() | 構(gòu)造一個請求,最基本的方法,是下面方法的支撐 |
requests.get() | 獲取HTML網(wǎng)頁,對應(yīng)HTTP中的GET方法 |
requests.post() | 向HTML網(wǎng)頁提交POST信息,對應(yīng)HTTP中的POST方法 |
requests.head() | 獲取HTML網(wǎng)頁的頭信息,對應(yīng)HTTP中的HEAD方法 |
requests.put() | 向HTML提交PUT方法,對應(yīng)HTTP中的PUT方法 |
requests.patch() | 向HTML網(wǎng)頁提交局部請求修改的的請求,對應(yīng)HTTP中的PATCH方法 |
requests.delete() | 向HTML提交刪除請求,對應(yīng)HTTP中的DELETE方法 |
Requests庫的get()方法
r = requests.get(url)
1、構(gòu)造一個向服務(wù)器請求資源的Request對象??Request
2、返回一個包含服務(wù)器資源的Response對象??Response?
?Response對象包含爬蟲返回的內(nèi)容
requests.get(url,params=None,**kwargs)
url:獲取html的網(wǎng)頁的url
params:url中的額外的參數(shù),字典或字節(jié)流格式,可選
**kwargs:12個控制訪問的參數(shù)
def get(url,params=None,**kwargs):"""Send a GET request.:param url: URL for the new :class:'Request' object.:param params: (optional) Dictionary or bytes to be sent in the query string for the:param \*\*kwargs: Optional arguments that ''request'' takes.:return: class:'Request <Request>' object:rtype: requests.Request"""kwargs.setdefault('allow_radirects', True)return request('get', url, params=params, **kwargs)
Response對象的屬性
屬性 | 說明 |
---|---|
r.status_code | HTTP請求返回狀態(tài)碼,200表示連接成功,404表示失敗 |
r.text | HTTP響應(yīng)的字符串形式,即,url對應(yīng)的頁面內(nèi)容 |
r.encoding | 從HTTP header中猜測的響應(yīng)內(nèi)容的編碼方式 |
r.apparent_encoding | 從內(nèi)容中分析響應(yīng)內(nèi)容的編碼方式(備選編碼方式) |
r.content | HTTP響應(yīng)內(nèi)容的二進(jìn)制形式 |
r.encoding:如果header中不存在charset,則認(rèn)為編碼為 ISO-8859-1。
r.apparent_encoding:根據(jù)網(wǎng)頁內(nèi)容分析出的編碼方式。
爬取網(wǎng)頁的通用代碼框架
理解requests庫的異常
異常 | 說明 |
---|---|
requests.ConnectionError | 網(wǎng)絡(luò)連接異常,如DNS查詢失敗,拒絕連接等 |
requests.HTTPError | HTTP錯誤異常 |
requests.URLRequired | URL缺失異常 |
requests.TooManyRedirects | 超過最大重定向次數(shù),產(chǎn)生重定向異常 |
requests.ConnectTimeout | 連接遠(yuǎn)程服務(wù)器超時異常 |
requests.Timeout | 請求URL超時,產(chǎn)生超時異常 |
專門與異常打交道
import requests
def getHTMLText(url):try:r = requests.get(url, timeout=30)r.raise_for_status() # 如果不是200,引發(fā)HTTPError異常r.encoding = r.apparent_encodingreturn r.textexcept:return "產(chǎn)生異常"if __name__ == "__main__":url = "http://www.daidu.dom"print(getHTMLText(url))
爬取網(wǎng)頁的通用代碼框架最大的作用是能夠使用戶訪問或爬取網(wǎng)頁變得更有效更穩(wěn)定更可靠
HTTP協(xié)議及Requests庫方法
HTTP協(xié)議
HTTP,Hypertext Transfer Protocol,超文本傳輸協(xié)議。
HTTP是一個基于“請求與響應(yīng)”模式的、無狀態(tài)的應(yīng)用層協(xié)議。
請求與響應(yīng):用戶發(fā)起請求,服務(wù)器做相關(guān)響應(yīng)。
無狀態(tài):第一次跟第二次請求之間并沒有相關(guān)的關(guān)聯(lián)。
應(yīng)用層協(xié)議:該協(xié)議工作再TCP協(xié)議之上。
HTTP協(xié)議采用URL作為定位網(wǎng)絡(luò)資源的標(biāo)識。
URL格式:http://host[:post][path]
host:合法的Internet主機(jī)域名或IP地址
port:端口號,缺省端口為80
path:請求資源的路徑
HTTP URL實例:
http://www.bit.edu.cn
http://220.181.111.188/duty
HTTP URL理解:
URL是通過HTTP協(xié)議存取資源的Internet路徑,一個URL對應(yīng)一個數(shù)據(jù)資源。
HTTP協(xié)議對資源的操作
方法 | 說明 |
GET | 請求獲取URL位置的資源 |
HEAD | 請求獲取URL位置資源的響應(yīng)消息報告,即獲取該資源的頭部消息 |
POST | ?請求向URL位置的資源后附加新的數(shù)據(jù) |
PUT | 請求向URL位置存儲一個資源,覆蓋原URL位置的資源 |
PATCH | 請求局部更新URL位置的資源,即改變該處資源的部分內(nèi)容 |
DELETE | 請求刪除URL位置存儲的資源 |
理解PATCH和PUT的區(qū)別
假設(shè)URL位置有一組數(shù)據(jù)UserInfo,包括UserID、UserName等20個字段。
需求:用戶修改了UserName,其他不變。
- 采用PATCH,僅向URL提交UserName的局部更新請求。
- 采用PUT,必須將所有20個字段一并提交到URL,未提交字段被刪除。
PATCH的最主要好處:節(jié)省網(wǎng)絡(luò)帶寬
HTTP協(xié)議與Requsets庫
HTTP協(xié)議方法 | Requsets庫方法 | 功能一致性 |
---|---|---|
GET | requests.get() | 一致 |
HEAD | requests.post() | 一致 |
POST | requests.head() | 一致 |
PUT | requests.put() | 一致 |
PATCH | requests.patch() | 一致 |
DELETE | requests.delete() | 一致 |
Requsets庫的head()方法
r = requests.head('http://httpbin.org/get')
r.headers # 展示反饋頭部信息的內(nèi)容
r.text # 展示全部內(nèi)容,但發(fā)現(xiàn)內(nèi)容是空
head()方法可以用很少的網(wǎng)絡(luò)流量獲取網(wǎng)絡(luò)資源的概要信息。
Requsets庫的post()方法
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post('http://httpbin.org/post', data = payload)
print(r.text)
當(dāng)我們向UPL去POST一個字典,或者POAT鍵值對的時候,那么鍵值對會默認(rèn)地被存儲到表單的字段下。
r = requests.post('http://httpbin.org/post', data = 'ABC')
print(r.text)
如果我們不提交鍵值對,就提交一個字符串ABC,那么我們就發(fā)現(xiàn)ABC被存到了data的相關(guān)的字段下。
post方法根據(jù)用戶提交內(nèi)容的不同在服務(wù)器上會做數(shù)據(jù)的相關(guān)的整理。
put方法也是一樣,它與post方法類似,只不過它能夠?qū)⒃械臄?shù)據(jù)覆蓋掉。
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.put('http://httpbin.org/post', data = payload)
print(r.text)
Requests庫主要方法解析
requests.requst()
requests.requst(method,url,**kwargs)
method:請求方式,對應(yīng)get/put/post等7種
url:擬獲取頁面的url鏈接
**kwargs:控制訪問的參數(shù),共13個
method:請求方式
r =?requests.requst('GET',url,**kwargs)
r =?requests.requst('HEAD',url,**kwargs)
r =?requests.requst('POST',url,**kwargs)
r =?requests.requst('PUT',url,**kwargs)
r =?requests.requst('PATCH',url,**kwargs)
r =?requests.requst('delete',url,**kwargs)
r =?requests.requst('OPTIONS',url,**kwargs)
OPTIONS,事實上是向服務(wù)器獲取一些服務(wù)器跟客戶端能夠打交道的參數(shù),這里面并不與獲取資源直接相關(guān),因此平時中使用的少。
**kwargs:控制訪問的參數(shù),均為可選項
- params:字典或字節(jié)序列,作為參數(shù)增加到url中
kv = {'key1': 'value1', 'key2': 'value2'}
r = requests.request('http://python123.io/ws', params = kv)
print(r.url)# 運行結(jié)果 http://python123.io/ws?key1=value1&key2=value2
- data:字典、字節(jié)序列或文件對象,作為Request的內(nèi)容
kv = {'key1': 'value1', 'key2': 'value2'}
r = requests.request('POST','http://python123.io/ws', data = kv)
body = '主體內(nèi)容'
r = requests.request('POST','http://python123.io/ws', data = body)
- json:JSON格式的數(shù)據(jù),作為Request的內(nèi)容
kv = {'key1': 'value1', 'key2': 'value2'}
r = requests.request('POST','http://python123.io/ws', json = kv)
- headers:字典,HTTP定制頭
hd = {'user-agent': 'Chrome/10'}
r = requests.request('POST','http://python123.io/ws', headers = hd)
- cookies:字典或CookieJar,Request中的cookies
- auth:元組,支持HTTP認(rèn)證功能
- files:字典類型,傳輸文件
fs = {'file': open'data.xls', 'rb'}
r = requests.request('POST','http://python123.io/ws', files = fs)
- timeout:設(shè)定超時時間,秒為單位
r = requests.request('POST','http://python123.io/ws', timeout = 10)
proxies:字典類型,設(shè)定訪問代理服務(wù)器,可以增加登錄認(rèn)證
pxs = { 'http':'http://user:pass@10.10.10.1:1234','https','http://10.10.10.1:4321'}
r = requests.request('POST','http://python123.io/ws', proxies = pxs)
- allow_redirects:True/False,默認(rèn)為True,重定向開關(guān)
- stream:True/False,默認(rèn)為True,獲取內(nèi)容立即下載開關(guān)
- verify:True/False,默認(rèn)為True,認(rèn)證SSL證書開關(guān)
- cert:本地SSL證書路徑
requests.get()
requests.get(url,params=None,**kwargs)
url:獲取頁面中的url鏈接
params:url中的額外參數(shù),字典或字節(jié)流格式,可選
**kwargs:12個控制訪問的參數(shù)(request中除了params參數(shù)之外的)
requests.head()
requests.head(url,**kwargs)
url:擬獲取頁面中的url鏈接
**kwargs:13個控制訪問的參數(shù)(與request一樣)
requests.post()
requests.post(url,data = None, json = None,**kwargs)
url:擬更新頁面的url鏈接
data:字典、字節(jié)序列或文件,Request的內(nèi)容
json:JSON格式的數(shù)據(jù),Request的內(nèi)容
**kwargs:11個控制訪問的參數(shù)(除了data和json,其他11個request一樣的參數(shù)放最后)
requests.put()
requests.put(url,data = None,**kwargs)
url:擬更新頁面的url鏈接
data:字典、字節(jié)序列或文件,Request的內(nèi)容
**kwargs:12個控制訪問的參數(shù)(除了data,其他12個request一樣的參數(shù)放最后)
requests.patch()
requests.patch(url,data = None,**kwargs)
url:擬更新頁面的url鏈接
data:字典、字節(jié)序列或文件,Request的內(nèi)容
**kwargs:12個控制訪問的參數(shù)(除了data,其他12個request一樣的參數(shù)放最后)
requests.delete()
requests.delete(url,**kwargs)
url:擬刪除頁面的url鏈接
**kwargs:13個控制訪問的參數(shù)(request一樣)