目錄
-
Requests庫
-
Requests庫的7個主要方法
- Requests庫的get()方法
- Requests庫的head()方法
-
Requests庫的7個主要方法
- Response對象的屬性
-
理解Requests庫的異常
- 爬取網頁的通用代碼框架
-
HTTP協議
- 協議對資源的操作
- 理解PATCH和PUT的區別
- HTTP協議與Requests庫
- Requests庫主要方法解析
Requests庫
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()方法
-
r=requests.get(url)
r: 返回一個包含服務器資源的 Response 對象
get: 構造一個向服務器請求資源的 Request 對象
import requests # 導入 requests庫
r = requests.get("https://www.baidu.com") # 使用get請求進行進行訪問,得到response響應r
print(r.text) # 打印response響應的文本內容
Requests庫的head()方法
-
r=requests.head(url)
r: 返回一個包含服務器資源的 Response 對象
head: 構造一個向服務器獲取HTML網頁頭信息的方法
# head方法
r = requests.head("https://www.baidu.com") # 使用head請求進行訪問
print(r.headers) # 通過response響應中的headers打印 html中的頭部信息
print(r.text) # 通過text響應的文本內容無效
Response對象的屬性
Response對象包含服務器返回的所有信息,也包含請求的Request信息
屬性 | 說明 |
---|---|
r.status_code | HTTP請求的返回狀態,200表示連接成功,404表示失敗 |
r.text | HTTP響應內容的字符串形式,即url對于的內容 |
r.encoding | 從HTTP header中猜測的響應內容編碼方式 |
r.apparent_encoding | 從內容中分析出的響應內容編碼方式(備選編碼方式) |
r.content | HTTP響應內容的二進制形式 |
理解Requests庫的異常
異常 | 說明 |
---|---|
requests.ConnectionError | 網絡連接錯誤異常,如DNS查詢失敗、拒絕連接等 |
requests.HTTPError | HTTP錯誤異常 |
requests.URLRequired | URL缺失異常 |
requests.TooManyRedirects | 超過最大重定向次數,產生重定向異常 |
requests.ConnectTimeout | 連接遠程服務器超時異常 |
requests.Timeout | 請求URL超時,產生超時異常 |
r.raise_for_status() | 如果不是200,產生異常requests.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 "產生異常"
HTTP協議
HTTP ,Hypertext Transfer Protocol,超文本傳輸協議
HTTP是一個基于“請求與響應”模式的、無狀態的應用層協議
HTTP協議采用URL作為定位網絡資源的標識,URL格式如下:
?
http://host[:port][path]
host: 合法的Internet主機域名或IP地址
port: 端口號,缺省端口為80
path: 請求資源的路徑
協議對資源的操作
方法 | 說明 |
---|---|
GET | 請求獲取URL位置的資源 |
HEAD | 請求獲取URL位置的資源的響應消息報告,即獲得該資源的頭部信息 |
POST | 請求向URL位置的資源后附加新的數據 |
PUT | 請求向URL位置存儲一個資源,覆蓋原URL位置的資源 |
PATCH | 請求局部更新URL位置的資源,即改變該處資源的部分內容 |
DELETE | 請求刪除URL位置存儲的資源 |
理解PATCH和PUT的區別
假設URL位置有一組數據UserInfo,包括UserID、UserName等20個字段
需求:
用戶修改了UserName,其他不變
- 采用PATCH,僅向URL提交UserInfo的局部更新請求
- 采用PUT,必須將所有20個字段一并提交到URL,未提交字段被刪除
PATCH的最主要好處 :節省網絡帶寬
HTTP協議與Requests庫
HTTP協議方法 | 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: 請求方式,對應get/put/post等7中
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 :控制訪問的參數, 13 個。均為可選項(與上面內容一致,不再贅述)
-
4. requests.post(url, data=None, json=None, **kwargs)
url: 擬更新頁面的url鏈接
data: 字典、字節序列或文件,Request的內容
json: JSON格式的數據,作為Request的內容
* *kwargs :控制訪問的參數, 11 個。均為可選項(與上面內容一致,不再贅述)
-
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 :控制訪問的參數, 13 個。均為可選項(與上面內容一致,不再贅述)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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