Request庫安裝方法
- 使用管理員權(quán)限啟動 command控制臺(win+X 命令提示符(管理員))
- 使用pip安裝requests庫(默認(rèn)配置好python以及pip的環(huán)境變量)
pip3 install requests
Request庫方法介紹
方法 | 說明 |
---|---|
requests.request() | 構(gòu)造一個請求典勇,支撐一下各方法的基礎(chǔ)方法 |
requests.get() | 獲取HTML網(wǎng)頁的主要方法蔚叨,對應(yīng)于HTTP的GET |
requests.head() | 獲取HTML網(wǎng)頁頭信息的方法揽祥,對應(yīng)于HTTP的HEAD |
requests.post() | 向HTML網(wǎng)頁提交POST請求的方法泵喘,對應(yīng)于HTTP的POST |
requests.put() | 向HTML網(wǎng)頁提交PUT請求的方法蚀浆,對應(yīng)于HTTP的PUT |
requests.patch() | 向HTML網(wǎng)頁提交局部修改請求冲簿,對應(yīng)于HTTP的PATCH |
requests.delete() | 向HTML頁面提交刪除請求,對應(yīng)于HTTP的DELETE |
request.get()方法
構(gòu)造一個向服務(wù)器請求資源的Request對象
返回一個包含服務(wù)器資源的Response對象
r = requests.get(url)
requests.get(url, params=None, **kwargs)
url:擬獲取頁面的url鏈接
params:url中的額外參數(shù)擦剑,字典或字節(jié)流格式妖胀,可選
**kwargs:12個控制訪問的參數(shù)
def get(url, params=None, **kwargs):
kwargs.setdefault('allow_redirects', True)
return request('get', url, params=params, **kwargs)
response對象的屬性
屬性 | 說明 |
---|---|
r.status_code | HTTP請求的返回狀態(tài)芥颈,200表示連接成功,404表示失敗 |
r.text | HTTP響應(yīng)內(nèi)容的字符串形式赚抡,即爬坑,url對應(yīng)的頁面內(nèi)容 |
r.encoding | 從HTTP header中猜測的響應(yīng)內(nèi)容編碼方式 |
r.apparent_encoding | 從內(nèi)容分析出的響應(yīng)內(nèi)容編碼方式(備選編碼方式) |
r.content | HTTP響應(yīng)內(nèi)容的二進(jìn)制形式 |
理解Response的編碼
屬性 | 說明 |
---|---|
r.encoding | 從HTTP header中猜測的響應(yīng)內(nèi)容編碼方式 |
r.apparent_encoding | 從內(nèi)容中分析出的響應(yīng)內(nèi)容編碼方式(備選編碼方式) |
r.encoding:如果header中不存在charset,則認(rèn)為編碼為ISO-8859-1
r.apparent_encoding:根據(jù)網(wǎng)頁內(nèi)容分析出的編碼方式
理解Requests庫的異常
異常 | 說明 |
---|---|
requests.ConnectionError | 網(wǎng)絡(luò)連接錯誤異常涂臣,如DNS查詢失敗盾计、拒絕連接等 |
requests.HTTPError | HTTP錯誤異常 |
requests.URLRequired | URL缺失異常 |
requests.TooMangRedirects | 超過最大重定向次數(shù),產(chǎn)生重定向異常 |
requests.ConnectTimeout | 連接遠(yuǎn)程服務(wù)器超時異常 |
requests.Timeout | 請求URL超時赁遗,產(chǎn)生超時異常 |
r.raise_for_status() | 如果不是200署辉,產(chǎn)生異常requests.HTTPError |
爬去網(wǎng)頁的通用代碼框架
import requests
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status() #如果狀態(tài)不是200,引發(fā)HTTPError異常#
r.encoding = r.apparent_encoding
return r.text
except:
return "產(chǎn)生異常"
if __name__ == "__main__":
url = "http://www.baidu.com"
print(getHTMLText(url))
HTTP協(xié)議對資源的操作
方法 | 說明 |
---|---|
GET | 請求獲取URL位置的資源 |
HEAD | 請求獲取URL位置資源的響應(yīng)消息報告岩四,即獲得該資源的頭部信息 |
POST | 請求向URL位置的資源后附加新的數(shù)據(jù) |
PUT | 請求向URL位置存儲的一個資源哭尝,覆蓋原URL位置的資源 |
PATCH | 請求局部更新URL位置的資源,即改變該處資源的部分內(nèi)容 |
DELETE | 請求刪除URL位置存儲的資源 |
Request方法
requests.request(method, url, **kwargs)
method:請求方式
url:擬獲取頁面的url鏈接
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:控制訪問的參數(shù)剖煌,均為可選項材鹦,共13個
params:字典或字節(jié)序列,作為參數(shù)增加到url中
>>> kv = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.request('GET', 'http://python123.io/ws', params=kv)
>>> print(r.url)
http://python123.io/ws?key1=value1&key2=value2
data:字典耕姊、字節(jié)序列或文件對象桶唐,作為Request的對象
>>> kv = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.request('POST', 'http://python123.io/ws', data=kv)
>>> body = '主體內(nèi)容'
>>> r = requests.request('POST', 'http://python123.io/ws', data=body)
json:JSON格式的數(shù)據(jù),作為Request的內(nèi)容
>>> kv = {'key1': 'value1'}
>>> r = requests.request('POST', 'http://python123.io/ws', json=kv)
headers:字典茉兰,HTTP定制頭
>>> hd = {'user-agent': 'Chrome/10'}
>>> r = requests.request('POST', 'http://python123.io/ws', headers=hd)
cookies:字典或CookieJar尤泽,Request中的cookie
auth:元組,支持HTTP認(rèn)證功能
files:字典類型规脸,傳輸文件
>>> fs = {'file': open('data.xls','rb')}
>>> r = requests.request('POST', 'http://python123.io/ws', files=fs)
timeout:設(shè)定超時時間坯约,秒為單位
>>> r = requests.request('GET', 'http://www.baidu.com', timeout=10)
proxies:字典類型,設(shè)置訪問代理服務(wù)器燃辖,可以增加登錄認(rèn)證
>>> pxs = {'http': 'http://user:pass@10.10.10.1:1234'
'https': 'https://10.10.10.1:4321'}
>>> r = requests.request('GET', 'http://www.baidu.com', proxies=pxs)
allow_redirects:True/False鬼店,默認(rèn)為Ture,重定向開關(guān)
stream:True/False黔龟,默認(rèn)為True妇智,獲取內(nèi)容立即下載開關(guān)
verigy:True/False,默認(rèn)為True氏身,認(rèn)證SSL證書開關(guān)
cert:本地SSL證書路徑
requests.get(url, params=None, **kwargs)
url:擬獲取頁面的url鏈接
params:url中的額外參數(shù)巍棱,字典或字節(jié)流格式,可選
**kwargs:12個控制訪問的參數(shù)
requests.head(url, **kwargs)
url:擬獲取頁面的url鏈接
**kwargs:13個控制訪問的參數(shù)
requests.post(url, data=None, json=None, **kwargs)
url:擬獲取頁面的url鏈接
data:字典蛋欣、字節(jié)序列或文件航徙,Request的內(nèi)容
json:JSON格式的數(shù)據(jù),Request的內(nèi)容
**kwargs:11個控制訪問參數(shù)
requests.put(url, data=None, **kwargs)
url:擬更新頁面的url鏈接
data:字典陷虎、字節(jié)序列或文件到踏,Request的內(nèi)容
**kwargs:12個控制訪問參數(shù)
requests.patch(url, data=None, **kwargs)
url:擬更新頁面的url鏈接
data:字典杠袱、字節(jié)序列或文件,Request的內(nèi)容
**kwargs:12個控制訪問參數(shù)
requests.delete(url, **kwargs)
url:擬刪除頁面的url鏈接
**kwargs:13個控制訪問參數(shù)