Python3 requests 模塊

2023-04-14 16:00 更新

通常我們會(huì)選擇使用request模塊來發(fā) 送 HTTP 請(qǐng)求。

因?yàn)閞equests 模塊比 urllib 模塊更簡潔。

但requests模塊并不是python內(nèi)置的標(biāo)準(zhǔn)庫,我們需要使用pip命令來安裝這個(gè)模塊!

pip install requests

request的使用相比于urllib簡潔了很多,如下所示:

# 導(dǎo)入 requests 包
import requests

# 發(fā)送請(qǐng)求
x = requests.get('http://www.o2fo.com/')

# 返回網(wǎng)頁內(nèi)容
print(x.text)

每次調(diào)用 requests 請(qǐng)求之后,會(huì)返回一個(gè) response 對(duì)象,該對(duì)象包含了具體的響應(yīng)信息。

響應(yīng)信息如下:

屬性或方法 說明
apparent_encoding 編碼方式
close() 關(guān)閉與服務(wù)器的連接
content 返回響應(yīng)的內(nèi)容,以字節(jié)為單位
cookies 返回一個(gè) CookieJar 對(duì)象,包含了從服務(wù)器發(fā)回的 cookie
elapsed 返回一個(gè) timedelta 對(duì)象,包含了從發(fā)送請(qǐng)求到響應(yīng)到達(dá)之間經(jīng)過的時(shí)間量,可以用于測(cè)試響應(yīng)速度。比如 r.elapsed.microseconds 表示響應(yīng)到達(dá)需要多少微秒。
encoding 解碼 r.text 的編碼方式
headers 返回響應(yīng)頭,字典格式
history 返回包含請(qǐng)求歷史的響應(yīng)對(duì)象列表(url)
is_permanent_redirect 如果響應(yīng)是永久重定向的 url,則返回 True,否則返回 False
is_redirect 如果響應(yīng)被重定向,則返回 True,否則返回 False
iter_content() 迭代響應(yīng)
iter_lines() 迭代響應(yīng)的行
json() 返回結(jié)果的 JSON 對(duì)象 (結(jié)果需要以 JSON 格式編寫的,否則會(huì)引發(fā)錯(cuò)誤)
links 返回響應(yīng)的解析頭鏈接
next 返回重定向鏈中下一個(gè)請(qǐng)求的 PreparedRequest 對(duì)象
ok 檢查 "status_code" 的值,如果小于400,則返回 True,如果不小于 400,則返回 False
raise_for_status() 如果發(fā)生錯(cuò)誤,方法返回一個(gè) HTTPError 對(duì)象
reason 響應(yīng)狀態(tài)的描述,比如 "Not Found" 或 "OK"
request 返回請(qǐng)求此響應(yīng)的請(qǐng)求對(duì)象
status_code 返回 http 的狀態(tài)碼,比如 404 和 200(200 是 OK,404 是 Not Found)
text 返回響應(yīng)的內(nèi)容,unicode 類型數(shù)據(jù)
url 返回響應(yīng)的 URL
# 導(dǎo)入 requests 包
import requests

# 發(fā)送請(qǐng)求
x = requests.get('http://www.o2fo.com/')

# 返回 http 的狀態(tài)碼
print(x.status_code)

# 響應(yīng)狀態(tài)的描述
print(x.reason)

# 返回編碼
print(x.apparent_encoding)

輸出結(jié)果如下:

200
OK
utf-8

請(qǐng)求 json 數(shù)據(jù)文件,返回 json 內(nèi)容:

# 導(dǎo)入 requests 包
import requests

# 發(fā)送請(qǐng)求
x = requests.get('http://www.o2fo.com/try/ajax/json_demo.json')

# 返回 json 數(shù)據(jù)
print(x.json())

輸出結(jié)果如下:

{'name': '網(wǎng)站', 'num': 3, 'sites': [{'name': 'Google', 'info': ['Android', 'Google 搜索', 'Google 翻譯']}, {'name': 'w3cschool', 'info': ['編程獅', '編程獅工具', '編程獅微信']}, {'name': 'Taobao', 'info': ['淘寶', '網(wǎng)購']}]}

requests 方法

requests 方法如下表:

方法 描述
delete(urlargs) 發(fā)送 DELETE 請(qǐng)求到指定 url
get(urlparams, args) 發(fā)送 GET 請(qǐng)求到指定 url
head(urlargs) 發(fā)送 HEAD 請(qǐng)求到指定 url
patch(urldata, args) 發(fā)送 PATCH 請(qǐng)求到指定 url
post(urldata, json, args) 發(fā)送 POST 請(qǐng)求到指定 url
put(urldata, args) 發(fā)送 PUT 請(qǐng)求到指定 url
request(methodurlargs) 向指定的 url 發(fā)送指定的請(qǐng)求方法

使用 requests.request() 發(fā)送 get 請(qǐng)求:

# 導(dǎo)入 requests 包
import requests

# 發(fā)送請(qǐng)求
x = requests.request('get', 'http://www.o2fo.com/')

# 返回網(wǎng)頁內(nèi)容
print(x.status_code)

輸出結(jié)果如下:

200

設(shè)置請(qǐng)求頭:

# 導(dǎo)入 requests 包
import requests

 
kw = {'w':'python 教程'}

# 設(shè)置請(qǐng)求頭
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
 
# params 接收一個(gè)字典或者字符串的查詢參數(shù),字典類型自動(dòng)轉(zhuǎn)換為url編碼,不需要urlencode()
response = requests.get("http://www.o2fo.com/search/", params = kw, headers = headers)

# 查看響應(yīng)狀態(tài)碼
print (response.status_code)

# 查看響應(yīng)頭部字符編碼
print (response.encoding)

# 查看完整url地址
print (response.url)

# 查看響應(yīng)內(nèi)容,response.text 返回的是Unicode格式的數(shù)據(jù)
print(response.text)

輸出結(jié)果如下:

200
UTF-8
http://www.o2fo.com/search/?w=python+%E6%95%99%E7%A8%8B

... 其他內(nèi)容...

post() 方法可以發(fā)送 POST 請(qǐng)求到指定 url,一般格式如下:

requests.post(url, data={key: value}, json={key: value}, args)
  • url 請(qǐng)求 url。
  • data 參數(shù)為要發(fā)送到指定 url 的字典、元組列表、字節(jié)或文件對(duì)象。
  • json 參數(shù)為要發(fā)送到指定 url 的 JSON 對(duì)象。
  • args 為其他參數(shù),比如 cookies、headers、verify等。
# 導(dǎo)入 requests 包
import requests

# 發(fā)送請(qǐng)求
x = requests.post('http://www.o2fo.com/try/ajax/demo_post.php')

# 返回網(wǎng)頁內(nèi)容
print(x.text)

輸出結(jié)果如下:

<p style='color:red;'>本內(nèi)容是使用 POST 方法請(qǐng)求的。</p><p style='color:red;'>請(qǐng)求時(shí)間:
2022-05-26 17:30:47</p>

post 請(qǐng)求帶參數(shù):

# 導(dǎo)入 requests 包
import requests

# 表單參數(shù),參數(shù)名為 fname 和 lname
myobj = {'fname': 'w3cschool','lname': 'Boy'}

# 發(fā)送請(qǐng)求
x = requests.post('http://www.o2fo.com/try/ajax/demo_post2.php', data = myobj)

# 返回網(wǎng)頁內(nèi)容
print(x.text)

輸出結(jié)果如下:

<p style='color:red;'>你好,w3cschool Boy,今天過得怎么樣?</p>


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)