爬蟲與Python:(三)基本庫的使用——3.網絡請求庫之request使用介紹


Python爬蟲中,除了urlib()外,還有一個使用的比較多的HTTP請求庫——requests。這個庫也是常用於HTTP請求模塊,它使用Python語言編寫,可以方便的對網頁進行爬取,是學習Python比較好的HTTP請求模塊。

Python3中沒有默認安裝requests庫,在前一篇文章中,已經介紹了requests的安裝。其中,requests庫的pip安裝命令為 pip install requests

接下來,我們來看看requests庫的7個主要方法,如下表所示:

方法 解釋
requests.request() 構造一個請求,支持以下各種方法
requests.get() 獲取HTML的主要方法
requests.head() 獲取HTML頭部信息的主要方法
requests.post() 向HTML網頁提交POST請求的方法
requests.put() 向HTML網頁提交PUT請求的方法
request.patch() 向HTML提交局部修改請求
request.delete() 向HTML提交刪除請求

1. requests.get()

requests.get()方法時常用方法之一,用戶獲取HTML。我們可以通過該方法鏈接其他方法,格式如下:

1 res = requests.get(url , params ,**kwargs)

參數說明見下表:

參數 描述
url 需要爬取的網站地址
params URL中的額外參數,字典或字節流格式,為可選參數。
**kwargs
控制訪問參數,具體詳見下表。
**Kwargs的參數
參數名稱 描述
params 字典或字節列,作為參數增加到url中,使用這個參數可以把一些鍵值對以?key=value1&key2=value2的模式增加到url中。
data 字典、列表或元組的字節的文件,作用是向服務器提交資源,作為requests的內容。與params不同的是,data提交的數據並不放在URL鏈接中,而是放在URL鏈接對應位置的地方作為數據存儲。它也可以接受一個字符串對象。
json

JSON格式的數據,json是HTTP中經常使用的數據格式,作為內容部分可以向服務器提交。例如:

1 kv= {'key1':'value1'}
2 r = requests.request('POST',"http://python123.io/ws",json=kv)
headers

 字典是HTTP的相關語,對應了向某URL訪問時發起的HTTP的頭字段,可以用字段來定義HTTP訪問的HTTP頭,可以用來模擬任何想模擬的瀏覽器對URL發起訪問。例如:

1 hd = {'user-agent':'Chrome/10'}
2 r = requests.requests('POST','http://python123.io/ws',headers=hd)
cookies  字典或CookieJar,指的是從HTTP中解析Cookie。
auth  元組,用來支持HTTP認證功能
files

 字典,是用來向服務器傳輸文件時使用的字段。例如

 fs = {'files':open('data.txt','rb')} 

timeout  用於設定超時時間,單位為秒,當發起一個GET請求時可以設置一個timeout時間,如果timeout時間內請求內容沒有返回,將產生一個timeout的異常。
proxies  字典,用來設置訪問代理服務器。
allow_redirects  開關,表示是否允許對URL進行重定向,默認為True
stream  開關,指是否對獲取內容進行立即下載,默認為True。
verify  開關,用於認證SSL證書,默認為True。
cert  用於設置保存本地SSL證書路徑。

 前面的示例代碼是構造一個服務器請求requests,返回一個包含服務器資源的Response對象。其中Request對象有以下屬性,如表3-3所示。

Response對象的屬性
屬性 說明
status_code HTTP請求的返回狀態,若為200表示請求成功
text HTTP響應內容的字符串形式,即返回的頁面內容
encoding 從HTTP header中猜測的相應內容編碼方式
apparent_encoding 從內容中分析
content  HTTP響應內容的二進制形式

 示例代碼如下:

1 import  requests;
2 
3 url = 'https://www.baidu.com/';
4 r = requests.get(url);
5 print(r.status_code)
6 print(r.encoding)
7 print(r.apparent_encoding)
8 print(r.text)

運行結果如下圖:

 

2.requests庫的異常

requests庫有時會產生異常,如網絡連接錯誤、HTTP錯誤異常、重定向異常、請求URL超時異常等。這里可以利用r.raise_for_status()語句來捕捉異常,該語句在方法內部判斷r.status_code是否等於200,如果不等於,則拋出異常,示例代碼如下。

 1 import requests
 2 
 3 url = 'https://www.baidu.com/';
 4 try:
 5     r = requests.get(url , timeout=30)  # 請求超時時間為30s
 6     r.raise_for_status()    # 如果狀態不是200則引發異常
 7     r.encoding = r.apparent_encoding # 配置編碼
 8     print(r.text)
 9     print(1)
10 except:
11     print("產生異常")

3. requests.head()

通過requests.head()方法,可以獲取地址的header頭部信息,示例代碼如下:

1 import requests
2 
3 url = 'https://www.baidu.com/';
4 r = requests.head(url)
5 print(r.headers)

4. requests.post()

requests.post()反復一般用於表單提交,向指定URL提交數據,可提交字符串、字典、文件等數據,示例代碼如下:

 1 import  requests
 2 
 3 # 向url post 一個字典
 4 payload = {"key1":"value1","key2":"value2"}
 5 r = requests.post("http://httpbin.org/post",data=payload) # 這里的url 並非真實的請求
 6 print(r.text)
 7 
 8 # 向url post 一個字符串,自動編碼為data
 9 r = requests.post("http://httpbin.org/post",data="hello") # 這里的url 並非真實的請求
10 print(r.text)

5. requests.put()和requests.patch()

requests。patch()和reques.put()類似,兩者不同的是:當patch時,僅需提交修改的字段,但put時,必須將20個字段一起提交到URL,未提交的字段將會刪除;patch的優點是節省網絡帶寬,示例代碼如下:

 1 import  requests
 2 
 3 # requests.put
 4 payload = {"key1":"value1","key2":"value2"}
 5 r = requests.put("http://httpbin.org/put",data=payload) # 這里的url 並非真實的請求
 6 print(r.text)
 7 
 8 # requests.post
 9 payload = {"key1":"value1","key2":"value2"}
10 r = requests.patch("http://httWpbin.org/patch",data=payload) # 這里的url 並非真實的請求
11 print(r.text)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM