所謂爬蟲就是模擬客戶端傳送網路請求,獲取網路響應,並按照一定的規則解析獲取的資料並儲存的程式。要說 python 的爬蟲必然繞不過 requests 庫。
對於 requests 庫,官方文件是這麼說的:
requests 唯一的乙個非轉基因的 python http 庫,人類可以安全享用。警告:非專業使用其他 http 庫會導致危險的***,包括:安全缺陷症、冗餘**症、重新發明輪子症、啃文件症、抑鬱、頭疼、甚至死亡。這個介紹還是比較生動形象的,便不再多說。安裝使用終端命令
pip install requests
。
2.1 傳送請求
匯入 requests 模組:
import requests
獲取網頁:
r = requests.get("")
此時,我們獲取了 response 物件 r,我們可以通過 r 獲取所需資訊。requests 簡便的 api 意味著所有 http 請求型別都是顯而易見的,我們來看一下使用常見 http 請求型別 get、post、put、delete 的示例:
通常我們會設定請求的超時時間,requests 使用r = requests.head("/get")
r = requests.post("/post", data = )
r = requests.put("/put", data = )
r = requests.delete("/delete")
timeout
引數來設定,單位是秒,示例如下:
r = requests.head("/get", timeout=1)
2.2 引數傳遞
在使用 get 方式傳送請求時,我們會將鍵值對形式引數放在 url 中問號的後面,如:/get?key=val
,requests 通過 params 關鍵字,以乙個字串字典來提供這些引數。比如要傳key1=val1
和key2=val2
到/get
,示例如下:
requests 還允許將乙個列表作為值傳入:pms=
r = requests.get("/get", params=pms)
pms=
注
:字典裡值為 none 的鍵都不會被新增到 url 的查詢字串裡。
2.3 響應內容
import requests
r = requests.get("")
print(r.text)
# 輸出結果
#
r = requests.get(url, headers=hds)
注
:自定義 headers 優先順序是低於一些特定的資訊的,如:在.netrc
中設定了使用者認證資訊,使用 headers 設定的授權就不會生效,而當設定了auth
引數,.netrc
的設定會無效。所有的 headers 值必須是 string、bytestring 或者 unicode,通常不建議使用 unicode。
2.5 重定向與歷史
預設情況下,requests 會自動處理除了 head 以外的所有重定向,可以使用響應物件的history
屬性來追蹤重定向,其返回為響應物件列表,這個列表是按照請求由晚到早進行排序的,看一下示例:
如果使用的是get、post、put、delete、options、patch 可以使用import requests
r = requests.get("")
print(r.history)
# 輸出結果
#
allow_redirects
引數禁用重定向。示例如下:
r = requests.get("", allow_redirects=false)
2.6 錯誤與異常
當遇到網路問題(如:dns 查詢失敗、拒絕連線等)時,requests 會丟擲 connectionerror 異常;在 http 請求返回了不成功的狀態碼時, response.raise_for_status() 會丟擲 httperror 異常;請求超時,會丟擲 timeout 異常;請求超過了設定的最大重定向次數,會丟擲 toomanyredirects 異常。所有 requests 顯式丟擲的異常都繼承自 requests.exceptions.requestexception。
Python爬蟲 HTTP協議 Requests庫
http協議 http hypertext transfer protocol 即超文字傳輸協議。url是通過http協議訪問資源的internet路徑,乙個url對應乙個資料資源。http協議對資源的操作 requests庫提供了http所有的基本請求方式。官方介紹 requests庫的6個主要方...
python 爬蟲系列02 認識 requests
本系列所有文章基於 python3.5.2 requests 是基於 urllib 的三方模組,相比於 uillib,操作更簡潔,功能更強大,而且支援 python3 getimport requests r requests.get url print r.status code print r....
python小白學習記錄 爬蟲requests篇
一 引用庫 import requests 二 請求訪問url,網頁相應 res requests.get 網頁位址 三 表明返回內容 目前返回的response物件有四種屬性 status code 檢查請求是否成功 content 將資料轉換為二進位制資料 text 將資料轉換為字串型資料 en...