目錄
-
Requests庫
-
Requests庫的7個主要方法
- Requests庫的get()方法
- Requests庫的head()方法
-
Requests庫的7個主要方法
- Response對象的屬性
-
理解Requests庫的異常
- 爬取網(wǎng)頁的通用代碼框架
-
HTTP協(xié)議
- 協(xié)議對資源的操作
- 理解PATCH和PUT的區(qū)別
- HTTP協(xié)議與Requests庫
- Requests庫主要方法解析
Requests庫
Requests庫的7個主要方法
方法 | 說明 |
---|---|
requests.request() | 構(gòu)造一個請求,支撐以下各方法的基礎(chǔ)方法 |
requests.get() | 獲取HTML網(wǎng)頁的主要方法,對應(yīng)于HTTP的GET |
requests.head() | 獲取HTML網(wǎng)頁頭信息的方法,對應(yīng)于HTTP的HEAD |
requests.post() | 向HTML網(wǎng)頁提交POST請求的方法,對應(yīng)于HTTP的POST |
requests.put() | 向HTML網(wǎng)頁提交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)
r: 返回一個包含服務(wù)器資源的 Response 對象
get: 構(gòu)造一個向服務(wù)器請求資源的 Request 對象
import requests # 導入 requests庫
r = requests.get("https://www.baidu.com") # 使用get請求進行進行訪問,得到response響應(yīng)r
print(r.text) # 打印response響應(yīng)的文本內(nèi)容
Requests庫的head()方法
-
r=requests.head(url)
r: 返回一個包含服務(wù)器資源的 Response 對象
head: 構(gòu)造一個向服務(wù)器獲取HTML網(wǎng)頁頭信息的方法
# head方法
r = requests.head("https://www.baidu.com") # 使用head請求進行訪問
print(r.headers) # 通過response響應(yīng)中的headers打印 html中的頭部信息
print(r.text) # 通過text響應(yīng)的文本內(nèi)容無效
Response對象的屬性
Response對象包含服務(wù)器返回的所有信息,也包含請求的Request信息
屬性 | 說明 |
---|---|
r.status_code | HTTP請求的返回狀態(tài),200表示連接成功,404表示失敗 |
r.text | HTTP響應(yīng)內(nèi)容的字符串形式,即url對于的內(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)容的二進制形式 |
理解Requests庫的異常
異常 | 說明 |
---|---|
requests.ConnectionError | 網(wǎng)絡(luò)連接錯誤異常,如DNS查詢失敗、拒絕連接等 |
requests.HTTPError | HTTP錯誤異常 |
requests.URLRequired | URL缺失異常 |
requests.TooManyRedirects | 超過最大重定向次數(shù),產(chǎn)生重定向異常 |
requests.ConnectTimeout | 連接遠程服務(wù)器超時異常 |
requests.Timeout | 請求URL超時,產(chǎn)生超時異常 |
r.raise_for_status() | 如果不是200,產(chǎn)生異常requests.HTTPError |
爬取網(wǎng)頁的通用代碼框架
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)生異常"
HTTP協(xié)議
HTTP ,Hypertext Transfer Protocol,超文本傳輸協(xié)議
HTTP是一個基于“請求與響應(yīng)”模式的、無狀態(tài)的應(yīng)用層協(xié)議
HTTP協(xié)議采用URL作為定位網(wǎng)絡(luò)資源的標識,URL格式如下:
?
http://host[:port][path]
host: 合法的Internet主機域名或IP地址
port: 端口號,缺省端口為80
path: 請求資源的路徑
協(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提交UserInfo的局部更新請求
- 采用PUT,必須將所有20個字段一并提交到URL,未提交字段被刪除
PATCH的最主要好處 :節(jié)省網(wǎng)絡(luò)帶寬
HTTP協(xié)議與Requests庫
HTTP協(xié)議方法 | Requests庫方法 | 功能一致性 |
---|---|---|
GET | requests.get() | 一致 |
HEAD | requests.head() | 一致 |
POST | requests.post() | 一致 |
PUT | requests.put() | 一致 |
PATCH | requests.patch() | 一致 |
DELETE | requests.delete() | 一致 |
Requests庫主要方法解析
? Requests庫中有7個主要方法。其中,Requests庫中最常使用的就是get和head方法
-
1. requests.request(method, url, **kwargs)
method: 請求方式,對應(yīng)get/put/post等7中
url: 擬獲取頁面的url鏈接
* *kwargs :控制訪問的參數(shù), 13 個。均為可選項
- params:字典或字節(jié)序列,作為參數(shù)增加到url中
- data:字典、字節(jié)序列或文件對象,作為Request的內(nèi)容
- json:JSON格式的數(shù)據(jù),作為Request的內(nèi)容
- headers:字典,HTTP定制頭
- cookies:字典或CookieJar,Request中的cookie
- auth:元組,支持HTTP認證功能
- files:字典類型,傳輸文件
- timeout:設(shè)定超時時間,秒為單位
- proxies:字典類型,設(shè)定訪問代理服務(wù)器,可以增加登錄認證
- allow_redirects:True/False,默認為True,重定向開關(guān)
- stream:True/False,默認為True,獲取內(nèi)容立即下載開關(guān)
- verify:True/False,默認為True,認證SSL證書開關(guān)
- cert:本地SSL證書路徑
-
2. requests.get(url, params=None, **kwargs)
url: 擬獲取頁面的url鏈接
params: url中的額外參數(shù),字典或字節(jié)流格式,可選
* *kwargs :控制訪問的參數(shù), 12 個。均為可選項(與上面內(nèi)容一致,不再贅述)
-
3. requests.head(url, **kwargs)
url: 擬獲取頁面的url鏈接
* *kwargs :控制訪問的參數(shù), 13 個。均為可選項(與上面內(nèi)容一致,不再贅述)
-
4. requests.post(url, data=None, json=None, **kwargs)
url: 擬更新頁面的url鏈接
data: 字典、字節(jié)序列或文件,Request的內(nèi)容
json: JSON格式的數(shù)據(jù),作為Request的內(nèi)容
* *kwargs :控制訪問的參數(shù), 11 個。均為可選項(與上面內(nèi)容一致,不再贅述)
-
5. requests.put(url, data=None, **kwargs)
url: 擬更新頁面的url鏈接
data: 字典、字節(jié)序列或文件對象,Request的內(nèi)容
* *kwargs :控制訪問的參數(shù), 12 個。均為可選項(與上面內(nèi)容一致,不再贅述)
-
6. requests.patch(url, data=None, **kwargs)
url: 擬更新頁面的url鏈接
data: 字典、字節(jié)序列或文件對象,Request的內(nèi)容
* *kwargs :控制訪問的參數(shù), 12 個。均為可選項(與上面內(nèi)容一致,不再贅述)
-
7. requests.delete(url, **kwargs)
url: 擬刪除頁面的url鏈接
* *kwargs :控制訪問的參數(shù), 13 個。均為可選項(與上面內(nèi)容一致,不再贅述)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
