requests模塊

編寫requests模塊是因?yàn)镻ython的urllib模塊用起來太復(fù)雜。

使用舉例

快速上手requests,參考中文文檔。

發(fā)起請求

發(fā)起GET請求直接使用requestsget方法即可。例如下面的代碼獲取百度首頁的信息:

import requests

baidu_url = 'https://www.baidu.com'

response = requests.get(baidu_url)
print(response.content.decode())

如果要在URL上附加參數(shù),使用params參數(shù)傳入字典即可,參數(shù)會(huì)自動(dòng)附加到URL上,列表參數(shù)也會(huì)正確的附加:

base_url = 'http://httpbin.org/'

params = {
    'name': 'yitian',
    'age': 22,
    'friends': ['zhang3', 'li4']
}

response = requests.get(f'{base_url}get', params=params)
print(response.url)

結(jié)果:

http://httpbin.org/get?name=yitian&age=22&friends=zhang3&friends=li4

其他常用的HTTP操作例如PUT、DELETE、HEAD、OPTIONS等也支持,調(diào)用相應(yīng)方法即可。

獲取結(jié)果

發(fā)起請求之后,返回值是一個(gè)Response對象,利用它我們可以方便的獲取結(jié)果。

Response對象的常用屬性和方法如下:

屬性名 結(jié)果
text HTTP字符
encoding 響應(yīng)編碼,這個(gè)值可以改變,改變之后text屬性也會(huì)根據(jù)編碼而變化
content 未編碼的二進(jìn)制數(shù)據(jù)
json() 返回JSON數(shù)據(jù)
raw 結(jié)果的原始字節(jié)流
url 請求的URL
status_code 狀態(tài)碼
headers 請求頭字典
cookies cookies字典
history 如果發(fā)生重定向,所有請求對象都會(huì)保存到這里

自定義header

如果要在請求上添加請求頭,也非常簡單。有些網(wǎng)站對客戶端的限制比較嚴(yán)格,所以我們必須偽裝header。

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
}

response = requests.get('http://httpbin.org/get', headers=headers)
print(response.text)

假如使用自帶的urllib標(biāo)準(zhǔn)庫,那么代碼就比較復(fù)雜了。從這里我們可以看到requests確實(shí)非常方便。

import urllib.request

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
}

request = urllib.request.Request(baidu_url, headers=headers)
html = urllib.request.urlopen(request).read().decode()
print(html)

POST數(shù)據(jù)

如果我們要發(fā)送復(fù)雜的表單,就需要POST數(shù)據(jù)了。和GET傳送數(shù)據(jù)一樣,向方法中額外添加一個(gè)data參數(shù)。

data = {
    'name': 'yitian',
    'age': 22,
    'friends': ['zhang3', 'li4']
}
response = requests.post(f'{base_url}post', data=data)
print(response.text)

有時(shí)候POST數(shù)據(jù)不是使用表單方式,而是直接在請求體中附加參數(shù)。那么我們在發(fā)送參數(shù)的時(shí)候不能向data參數(shù)添加字典了,而應(yīng)該傳遞字符串。

import json

data = {
    'name': 'yitian',
    'age': 22,
    'friends': ['zhang3', 'li4']
}
response = requests.post(f'{base_url}post', data=json.dumps(data))
print(response.text)

有些程序(例如Github的API)需要將JSON字符串直接當(dāng)做請求體發(fā)送,比如說上面這種將字典轉(zhuǎn)換為JSON的例子。在這種情況下,我們可以直接將字典的引用傳遞給方法的json參數(shù),這樣就不需要我們手動(dòng)轉(zhuǎn)換,requests會(huì)自動(dòng)轉(zhuǎn)換。

response = requests.post(f'{base_url}post', json=data)

上傳文件

在網(wǎng)頁上,上傳頭像等操作都需要上傳multipart/form-data類型的表單。使用requests也非常簡單。需要注意打開文件的時(shí)候最好使用二進(jìn)制模式,使用文本模式打開文件可能導(dǎo)致requests不能正確計(jì)算文件的大小。

file = open(r'c:\Windows\System32\drivers\etc\hosts', mode='rb')

data = {
    'file': file
}

response = requests.post(f'{base_url}post', files=data)
print(response.text)

cookies

如果要獲取響應(yīng)的cookies,調(diào)用cookies屬性即可,它會(huì)返回一個(gè)RequestsCookieJar對象,它實(shí)現(xiàn)了標(biāo)準(zhǔn)庫的http.cookiejar。所以我們可以按照cookiejar的方法來使用RequestsCookieJar。比如說訪問百度的時(shí)候,它會(huì)分配一個(gè)cookie,所以我們可以使用下面的代碼獲取Cookie。

response = requests.get(baidu_url)
print(response.cookies)

如果要在發(fā)送數(shù)據(jù)的時(shí)候向服務(wù)器傳遞cookie,需要實(shí)例化一個(gè)RequestsCookieJar,然后傳遞給發(fā)送方法的cookies參數(shù)。

import requests.cookies

cookies = requests.cookies.RequestsCookieJar()
cookies.set('name', 'yitian')
response = requests.get(f'{base_url}cookies', cookies=cookies)
print(response.text)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Requests模塊是一個(gè)用于網(wǎng)絡(luò)訪問的模塊,其實(shí)類似的模塊有很多,比如urllib,urllib2,httpli...
    Lucas_Wong閱讀 20,586評論 1 57
  • 一、安裝Requests pip install requests 二、發(fā)送請求與傳遞參數(shù) 帶參數(shù)請求: impo...
    zksmile閱讀 653評論 0 2
  • requests是使用Python語言編寫的第三方網(wǎng)絡(luò)請求庫,其用法相較于urllib更加方便,可以節(jié)省大量的開發(fā)...
    henYee閱讀 579評論 0 0
  • Requests: 讓 HTTP 服務(wù)人類 雖然Python的標(biāo)準(zhǔn)庫中 urllib2 模塊已經(jīng)包含了平常我們使用...
    彡廿閱讀 635評論 0 1
  • Requests 是用Python語言編寫,基于 urllib,采用 Apache2 Licensed 開源協(xié)議的...
    _JYN_閱讀 772評論 0 4

友情鏈接更多精彩內(nèi)容