《Python網路爬蟲與數據挖掘小課堂》——part4
- 2019 年 11 月 24 日
- 筆記
Requests庫的入門-python

01
簡介
Requests庫是Python HTTP 庫。
Requests作用:自動爬取HTML頁面/自動提交網路請求。
Requests庫項目地址:http://docs.python-requests.org/en/master/
中文下載地址:http://docs.python-requests.org/zh_CN/latest/

02
安裝
Requests庫的安裝有兩種方式:
1.pip安裝:簡單快捷(推薦)
Win_7_64bit平台:
「以管理員身份運行」cmd,執行 pip install requests



Python的下載(版本有2.x和3.x)、安裝、環境變數配置、pip安裝及使用見往前文章(爬蟲系列)。
2.python命令方式
先去github網址的Requests庫項目下載:https://github.com/kennethreitz/requests
下載完解壓即可

下載完解壓到桌面即可,該文件夾目錄如下:

Win_7_64bit平台:「以管理員身份運行」cmd,
執行 python setup.py install

其中setup.py是Requests庫中setup.py的絕對路徑。
測試程式碼:以官網為例
>>> import requests
>>> r = requests.get('https://www.baidu.com')
>>> r.status_code
>>> r.headers
>>> r.encoding
>>> r.text
03
方法
Requests庫的七個主要方法及說明
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
01
Requests庫的get()方法

requests.get(url, params=None, **kwargs)
- url : 擬獲取頁面的url鏈接
- params : url中的額外參數,字典或位元組流格式,可選
- **kwargs : 12個控制訪問的參數
02
Requests庫的2個重要對象

Response對象包含爬蟲返回的內容

Response對象包含伺服器返回的所有資訊,也包含請求的Request資訊
Response對象的屬性及說明
r.status_code:HTTP請求的返回狀態,200表示連接成功,404表示失敗
r.text:HTTP響應內容的字元串形式,即,url對應的頁面內容
r.encoding:從HTTP header中猜測的響應內容編碼方式
r.apparent_encoding:從內容中分析出的響應內容編碼方式(備選編碼方式)
r.content:HTTP響應內容的二進位形式
理解Response的編碼
r.encoding:從HTTP header中猜測的響應內容編碼方式
r.apparent_encoding:從內容中分析出的響應內容編碼方式(備選編碼方式)
詳細說明如下:
- r.encoding:如果header中不存在charset,則認為編碼為ISO‐8859‐1
- r.text:根據r.encoding顯示網頁內容
- r.apparent_encoding:根據網頁內容分析出的編碼方式,可以看作是r.encoding的備選
03
理解Requests庫的異常
異常及說明
requests.ConnectionError:網路連接錯誤異常,如DNS查詢失敗、拒絕連接等
requests.HTTPError:HTTP錯誤異常
requests.URLRequired:URL缺失異常
requests.TooManyRedirects:超過最大重定向次數,產生重定向異常
requests.ConnectTimeout:連接遠程伺服器超時異常
requests.Timeout:請求URL超時,產生超時異常
r.raise_for_status()在方法內部判斷r.status_code是否等於200,如果不是200,產生異常 requests.HTTPError,不需要增加額外的if語句,該語句便於利用try‐except進行異常處理。
示例程式碼:
import requests
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return "產生異常"
if __name__ == "__main__":
url = "http://www.baidu.com"
print(getHTMLText(url))

04
HTTP協議與Requests庫
HTTP,Hypertext Transfer Protocol,超文本傳輸協議
HTTP是一個基於「請求與響應」模式的、無狀態的應用層協議
HTTP協議採用URL作為定位網路資源的標識,URL格式如下:
http://host[:port][path]
host: 合法的Internet主機域名或IP地址
port: 埠號,預設埠為80
path: 請求資源的路徑
URL是通過HTTP協議存取資源的Internet路徑,一個URL對應一個數據資源
HTTP協議對資源的操作:
方法及說明
GET——請求獲取URL位置的資源
HEAD——請求獲取URL位置資源的響應消息報告,即獲得該資源的頭部資訊
POST——請求向URL位置的資源後附加新的數據
PUT——請求向URL位置存儲一個資源,覆蓋原URL位置的資源
PATCH——請求局部更新URL位置的資源,即改變該處資源的部分內容
DELETE——請求刪除URL位置存儲的資源

通過URL和命令管理資源,操作獨立無狀態,網路通道及伺服器成為了黑盒子
理解PATCH和PUT的區別
假設URL位置有一組數據UserInfo,包括UserID、UserName等20個欄位
需求:用戶修改了UserName,其他不變
採用PATCH,僅向URL提交UserName的局部更新請求
採用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.request(method, url, **kwargs)
- method : 請求方式,對應get/put/post等7種
- url : 擬獲取頁面的url鏈接
- **kwargs:控制訪問的參數,共13個


requests.request(method, url, **kwargs)
method : 請求方式
- r = requests.request('GET', url, **kwargs)
- r = requests.request('HEAD', url, **kwargs)
- r = requests.request('POST', url, **kwargs)
- r = requests.request('PUT', url, **kwargs)
- r = requests.request('PATCH', url, **kwargs)
- r = requests.request('delete', url, **kwargs)
- r = requests.request('OPTIONS', url, **kwargs)
**kwargs:控制訪問的參數
- 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證書路徑
requests.get(url, params=None, **kwargs)
url : 擬獲取頁面的url鏈接
params : url中的額外參數,字典或位元組流格式,可選
**kwargs: 12個控制訪問的參數
requests.head(url, **kwargs)
url : 擬獲取頁面的url鏈接
**kwargs: 12個控制訪問的參數
requests.post(url, data=None, json=None, **kwargs)
url : 擬更新頁面的url鏈接
data : 字典、位元組序列或文件,Request的內容
json : JSON格式的數據,Request的內容
**kwargs: 12個控制訪問的參數
requests.put(url, data=None, **kwargs)
url : 擬更新頁面的url鏈接
data : 字典、位元組序列或文件,Request的內容
**kwargs: 12個控制訪問的參數
requests.patch(url, data=None, **kwargs)
url : 擬更新頁面的url鏈接
data : 字典、位元組序列或文件,Request的內容
**kwargs: 12個控制訪問的參數
requests.delete(url, **kwargs)
url : 擬刪除頁面的url鏈接
**kwargs: 12個控制訪問的參數
未完待續…………..
