By 一頁編程
下面我們介紹一下requests庫主要方法,并且對這些方法進(jìn)行解析磕秤。
Requests庫與HTTP協(xié)議的方法乳乌,功能是一一對應(yīng)的,包括以下7個(gè)方法:
方法 | 說明 |
---|---|
requests.request() | 構(gòu)造一個(gè)請求市咆,支撐以下各方法的基礎(chǔ)方法 |
requests.get() | 獲取HTML網(wǎng)頁的主要方法汉操,對應(yīng)HTTP協(xié)議的GET |
requests.head() | 獲取HTML網(wǎng)頁頭信息的方法,對應(yīng)HTTP協(xié)議的HEAD |
requests.post() | 向HTML網(wǎng)頁提交POST請求的方法蒙兰,對應(yīng)HTTP協(xié)議的POST |
requests.put() | 向HTML網(wǎng)頁提交PUT請求的方法磷瘤,對應(yīng)HTTP協(xié)議的PUT |
requests.patch | 向HTML網(wǎng)頁提交局部修改,對應(yīng)HTTP協(xié)議的PATCH |
requests.delete() | 向HTML網(wǎng)頁提交刪除請求的方法搜变,對應(yīng)HTTP協(xié)議的DELETE |
requests.request()方法
requests庫的request方法是所有方法的基礎(chǔ)方法采缚,它有3個(gè)參數(shù):
request(method, url, **kwargs)
- method:通過request()實(shí)現(xiàn)的請求方式,它分別對應(yīng)get挠他、post扳抽、put等7種方法。
- url:獲取頁面鏈接殖侵。
- kwargs:控制訪問參數(shù)贸呢,一共有13個(gè)。
請求方式
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)
其中前6種大家看到這些已經(jīng)非常清楚拢军,它們就是HTTP協(xié)議所對應(yīng)的請求功能楞陷,我們都已經(jīng)介紹過了。而options
事實(shí)上是向服務(wù)器獲取一些服務(wù)器跟客戶端能夠打交道的參數(shù)茉唉,這里邊并不與獲取資源直接相關(guān)固蛾,因此,我們在平時(shí)使用中用的比較少度陆。
在這7種方式中艾凯,我們除了直接使用request()方法之外,還可以使用requests庫的對應(yīng)方法懂傀。比如說趾诗,requests.get()
、requests.head()
鸿竖、requests.post()
來實(shí)現(xiàn)沧竟。
訪問控制參數(shù)
URL我們大家都知道它是鏈接,我們不多說了缚忧,那么request()的13個(gè)訪問控制的參數(shù)分別是什么呢悟泵?我們一一介紹一下。
-
params
params指能夠增加到url中的參數(shù)闪水,這個(gè)怎么理解呢糕非?我們看一個(gè)例子:
>>> 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
>>>
我們發(fā)現(xiàn),在我們給定的url中球榆,它的后面多了一個(gè)問號朽肥,問號后面有key1=value1,&key2=value2
。也就是說持钉,通過這樣一個(gè)參數(shù)衡招,我們可以把一些鍵值對增加到url中,那么使得url再去訪問時(shí)每强,不止訪問的是這個(gè)資源始腾,而同時(shí)代入了一些參數(shù),那服務(wù)器呢空执?可以接受這些參數(shù)浪箭,并根據(jù)這些參數(shù)篩選部分資源返回回來。
后面辨绊,我們會有例子重點(diǎn)介紹這個(gè)參數(shù)的使用奶栖。
-
data
第二個(gè)要介紹的訪問控制參數(shù)是data,它可以是字典门坷、字節(jié)序列或文件對象宣鄙。重點(diǎn)是作為向服務(wù)器提供或提交資源時(shí)使用“莺祝看下面的代碼:
>>> kv = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.request('GET', 'http://python123.io/ws', data = kv)
>>> body = '主題內(nèi)容'
>>> r = requests.request('GET', 'http://python123.io/ws', data = body)
使用data參數(shù)的時(shí)候框冀,我們所提交的鍵值對,對并不放在url鏈接里敏簿,而是放在url鏈接對應(yīng)位置的地方明也,作為數(shù)據(jù)來存儲。我們當(dāng)然也可以像data賦值一個(gè)字符串惯裕,那么這個(gè)字符串就會存到前面的url鏈接所對應(yīng)的位置温数。
-
json
大家看到名字就能想到他是json格式的數(shù)據(jù)。json格式蜻势,在http撑刺、html相關(guān)的外部開發(fā)中用到的非常常見,也是http協(xié)議使用的最經(jīng)常使用的數(shù)據(jù)格式握玛,那么它也是作為內(nèi)容部分可以向服務(wù)器提交够傍,比如說我們用字典構(gòu)造一個(gè)鍵值對甫菠,然后呢,我們可以把它復(fù)制給json參數(shù)冕屯,那么這個(gè)鍵值對就復(fù)制到服務(wù)器的json里面寂诱。
>>> kv = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.request('POST', 'http://python123.io/ws', json= kv)
-
headers
headers實(shí)際上是http頭的相關(guān)語句,它對應(yīng)了向某一個(gè)url訪問時(shí)所發(fā)起的http的頭字段安聘,簡單說痰洒,我們可以用這個(gè)字段來定制訪問某一個(gè)url的http的協(xié)議頭,舉個(gè)例子:
>>> hd = {'user-agent': 'Chrome/10'}
>>> r = requests.request('POST', 'http://python123.io/ws', headers = hd)
>>>
我們把user-agent
變?yōu)?code>Chrome/10浴韭,那么在訪問某一個(gè)鏈接時(shí)丘喻,我們可以把這樣的字段賦給headers,此時(shí)headers再去向服務(wù)器訪問時(shí)服務(wù)器看到的user-agent字段就是Chrome/10
念颈。那Chrome/10
是什么呢泉粉?他是指Chrome瀏覽器的第十個(gè)版本,也就是說我們可以模擬任何我們想模擬的瀏覽器向服務(wù)器發(fā)起訪問榴芳,而這種模擬瀏覽器的方法就是在headers字段中來實(shí)現(xiàn)搀继。
后面,我們有例子來去介紹這個(gè)字段的具體使用翠语。
-
cookies 和 auth
cookies和auth都是requests庫的高級功能叽躯。
cookies指的是從http協(xié)議中解析cookie, 它可以是字典肌括,也可以是CookieJar形式点骑。
auth字段是一個(gè)元組類型,它是支持http認(rèn)證功能的谍夭。
-
files
顧名思義黑滴,它是向服務(wù)器傳輸文件時(shí)使用的字段。我們可以定義一個(gè)字典紧索,用File袁辈,以對應(yīng)的文件為鍵值對,用open的方式打開這個(gè)文件珠漂,并把這個(gè)文件與files做一個(gè)關(guān)聯(lián)晚缩,同時(shí)對應(yīng)到相關(guān)的url上。通過這樣的方法媳危,我們可以向某一個(gè)鏈接提交某一個(gè)文件荞彼,這個(gè)在特定應(yīng)用時(shí)還是非常有用的。
>>> fs = {'file': open('data.txt', 'rb')}
>>> r = requests.request('POST', 'http://python123.io/ws', files= fs)
>>>
-
timeout
Timeout設(shè)定的超時(shí)時(shí)間待笑,以秒為單位鸣皂。當(dāng)我們發(fā)起一個(gè)get請求時(shí),我們可以設(shè)一個(gè)timeout時(shí)間,如果在timeout時(shí)間內(nèi)寞缝,我們的請求內(nèi)容沒有反饋回來癌压,那么它將產(chǎn)生一個(gè)timeout的異常。
>>> r = requests.request('POST', 'http://python123.io/ws', timeout= 10)
>>>
-
proxies
Proxies字段荆陆,他是一個(gè)字典類型措拇,可以為我們爬取網(wǎng)頁,設(shè)定相關(guān)的訪問代理服務(wù)器慎宾。這里我們增加兩個(gè)代理:
>>> pxs = {'http': 'http://user:pass@10.10.10.10:1234'
'https': 'https://10.10.10.10:4321'
>>> r = requests.request('GET', 'http://www.baidu.com', proxies= pxs)
>>>
第一個(gè)是http訪問時(shí)使用的代理,在這代理中浅悉,我們可以增加用戶名跟密碼的設(shè)置趟据。后面是一個(gè)https的代理服務(wù)器,這樣我們在訪問百度時(shí)的ip地址术健,就是代理服務(wù)器的ip地址汹碱。使用這個(gè)字段可以有效的隱藏用戶爬取網(wǎng)頁的源的ip地址信息,能夠有效地防止對爬蟲的逆追蹤荞估。
-
allow_redirects 和 stream
這兩個(gè)字段都是開關(guān)字段咳促。
allow_redirects表示允不允許對url進(jìn)行重定向。
stream指對獲取的內(nèi)容是否進(jìn)行立即下載勘伺,默認(rèn)情況是立即下載跪腹。
-
verify 和 cert
verify是一個(gè)認(rèn)證ssl證書的字段。
cert是保存本地ssl證書路徑的字段飞醉。
其他方法
requests.get(url, params=None, **kwargs)
requests.head(url, **kwargs)
requests.post(url, data=None, json=None, **kwargs)
requests.put(url, data=None, **kwargs)
requests.patch(url, data=None, **kwargs)
requests.delete(url, **kwargs)
在使用這6個(gè)方法的時(shí)候冲茸,由于這些方法會常用到某一些訪問控制參數(shù),所以就把這樣的參數(shù)作為一個(gè)顯示定義的參數(shù)量放到了函數(shù)的設(shè)計(jì)里邊缅帘,而那些不是特別常用的都放在了訪問控制可選的參數(shù)字段里邊轴术。