Requests庫的入門-pythonpython
01git
簡介github
Requests庫是Python HTTP 庫。web
Requests做用:自動爬取HTML頁面/自動提交網絡請求。json
Requests庫項目地址:http://docs.python-requests.org/en/master/服務器
中文下載地址:http://docs.python-requests.org/zh_CN/latest/微信
02cookie
安裝網絡
Requests庫的安裝有兩種方式:app
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個控制訪問的參數
未完待續...............

歡迎留言......
請你們關注公衆號動態!
請你們關注公衆號動態!
請你們關注公衆號動態!
本文分享自微信公衆號 - IT技術小咖(IT-arch)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。