Python怎么使用Requests請(qǐng)求網(wǎng)頁(yè)

本文小編為大家詳細(xì)介紹“Python怎么使用Requests請(qǐng)求網(wǎng)頁(yè)”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Python怎么使用Requests請(qǐng)求網(wǎng)頁(yè)”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

成都創(chuàng)新互聯(lián)-云計(jì)算及IDC服務(wù)提供商,涵蓋公有云、IDC機(jī)房租用、西部信息服務(wù)器托管、等保安全、私有云建設(shè)等企業(yè)級(jí)互聯(lián)網(wǎng)基礎(chǔ)服務(wù),歡迎來(lái)電:13518219792

Requests 繼承了urllib2的所有特性。

Requests支持HTTP連接保持和連接池,支持使用cookie保持會(huì)話,支持文件上傳,支持自動(dòng)確定響應(yīng)內(nèi)容的編碼,支持國(guó)際化的 URL 和 POST 數(shù)據(jù)自動(dòng)編碼。

安裝方式

利用 pip 安裝

$ pip install requests

GET請(qǐng)求

基本GET請(qǐng)求(headers參數(shù) 和 parmas參數(shù))

1.最基本的GET請(qǐng)求可以直接用get方法'

response = requests.get("http://www.baidu.com/")
 
# 也可以這么寫(xiě)
# response = requests.request("get", "http://www.baidu.com/")

2.添加 headers 和 查詢參數(shù)

如果想添加 headers,可以傳入headers參數(shù)來(lái)增加請(qǐng)求頭中的headers信息。

如果要將參數(shù)放在url中傳遞,可以利用 params 參數(shù)。

import requests
 
kw = {'wd':'長(zhǎ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.baidu.com/s?", params = kw, headers = headers)
 
# 查看響應(yīng)內(nèi)容,response.text 返回的是Unicode格式的數(shù)據(jù)
print (response.text)
 
# 查看響應(yīng)內(nèi)容,response.content返回的字節(jié)流數(shù)據(jù)
print (respones.content)
 
# 查看完整url地址
print (response.url)
 
# 查看響應(yīng)頭部字符編碼
print (response.encoding)
 
# 查看響應(yīng)碼
print (response.status_code)

運(yùn)行結(jié)果

......

......

'http://www.baidu.com/s?wd=%E9%95%BF%E5%9F%8E'

'utf-8'

200

使用response.text 時(shí),Requests 會(huì)基于 HTTP 響應(yīng)的文本編碼自動(dòng)解碼響應(yīng)內(nèi)容,大多數(shù) Unicode 字符集都能被無(wú)縫地解碼。

使用response.content 時(shí),返回的是服務(wù)器響應(yīng)數(shù)據(jù)的原始二進(jìn)制字節(jié)流,可以用來(lái)保存圖片等二進(jìn)制文件。

POST方法

1.基本的POST的請(qǐng)求

response = requests.post("http://www.baidu.com/",data = data)

2.body帶參數(shù)

formdata = {
    "type": "AUTO",
    "doctype": "json",
    "key": "www",
    "ue": "UTF-8",
}
url = "http://auto-installment/v1/loan-credit-check"
response = requests.post(url,data = data,headers=headers)
 
print(response.text)#顯示返回結(jié)果
print(response.json())# 如果是json文件可以直接顯示

注意:

打印的結(jié)果出現(xiàn)中文亂碼,使用json.dupms(response, ensure_ascii=False))解決

Session

一般利用Session在跨請(qǐng)求的時(shí)候保持某些參數(shù),比如實(shí)現(xiàn)登錄后才能訪問(wèn)其他頁(yè)面

# 1. 創(chuàng)建session對(duì)象,可以保存Cookie值
session = requests.session()
 
# 2. 需要登錄的用戶名和密碼
data = {"username": "mxxxx", "password": "1233444"}
 
# 3. 發(fā)送附帶用戶名和密碼的請(qǐng)求,并獲取登錄后的Cookie值,保存在ssion里
session.post("https://www.jianshu.com/sign_in", data=data)
 
# 4. ssion包含用戶登錄后的Cookie值,可以直接訪問(wèn)那些登錄后才可以訪問(wèn)的頁(yè)面
response = session.get("https://www.jianshu.com/writer#/")

踩坑記要

1.在使用requests去請(qǐng)求一個(gè)接口時(shí),出現(xiàn)報(bào)錯(cuò)的情況,但是這個(gè)接口本身卻沒(méi)有問(wèn)題。這是因?yàn)榻涌诘恼?qǐng)求參數(shù)有兩種情況:簡(jiǎn)單類型(一般少于3個(gè))和復(fù)雜對(duì)象類型。

解決方法:在headers中定義一下這兩種參數(shù)的類型

簡(jiǎn)單類型:headers={"Content-Type": "application/x-www-form-urlencoded"}

復(fù)雜對(duì)象類型:headers={"Content-Type":application/json}

2.某些HTTPS請(qǐng)求存在 SSL證書(shū)驗(yàn)證

解決方法:response = requests.get("https://www.baidu.com/", verify=False)

擴(kuò)展

1.requests請(qǐng)求失敗后,增加重試機(jī)制(若失敗,將會(huì)重試3次)

request_retry = requests.adapatrs.HTTPAdapaters(max_retries=3)
session.mount('https://',request_retry)

2.使用grequests實(shí)現(xiàn)異步請(qǐng)求

urls = [
    'http://www.url1.com',
    'http://www.url2.com',
    'http://www.url3.com',
    'http://www.url4.com',
    'http://www.url5.com',
]
resp = (grequests.get(u) for u in urls)
grequests.map(resp)

3.自定義cookies

我們使用Session實(shí)例來(lái)保持請(qǐng)求之間的cookies,但是有些特殊情況,需要使用自定義的cookies

我們使用Session實(shí)例來(lái)保持請(qǐng)求之間的cookies,但是有些特殊情況,需要使用自定義的cookies

# 自定義cookies
cookie = {'guid':'5BF0FAB4-A7CF-463E-8C17-C1576fc7a9a8','uuid':'3ff5f4091f35a467'}
 
session.post('http://', cookies=cookie)

4.統(tǒng)計(jì)一個(gè)API請(qǐng)求花費(fèi)的時(shí)間

session.get(url).elapsed.total_seconds()

5.設(shè)置請(qǐng)求超時(shí)

session.get(url, timeout=15)

6.文件上傳

Requests利用files作為參數(shù)模擬提交文件數(shù)據(jù)

file = {'file':open('test.bmp','rb')}   #rb表示用二進(jìn)制格式打開(kāi)指定目錄下的文件,且用于只讀
r =requests.post('http://',files=file)
print(r.text)

讀到這里,這篇“Python怎么使用Requests請(qǐng)求網(wǎng)頁(yè)”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁(yè)名稱:Python怎么使用Requests請(qǐng)求網(wǎng)頁(yè)
URL地址:http://bm7419.com/article28/jjedcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)用戶體驗(yàn)、響應(yīng)式網(wǎng)站、外貿(mào)建站定制開(kāi)發(fā)、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)