Python使用Requests請求網(wǎng)頁方式
Requests 繼承了urllib2的所有特性。
Requests支持HTTP連接保持和連接池,支持使用cookie保持會話,支持文件上傳,支持自動確定響應(yīng)內(nèi)容的編碼,支持國際化的 URL 和 POST 數(shù)據(jù)自動編碼。
安裝方式
利用 pip 安裝
$ pip install requests
GET請求
基本GET請求(headers參數(shù) 和 parmas參數(shù))
1.最基本的GET請求可以直接用get方法'
response = requests.get("http://www.baidu.com/") ? # 也可以這么寫 # response = requests.request("get", "http://www.baidu.com/")
2.添加 headers 和 查詢參數(shù)
如果想添加 headers,可以傳入headers參數(shù)來增加請求頭中的headers信息。
如果要將參數(shù)放在url中傳遞,可以利用 params 參數(shù)。
import requests ? kw = {'wd':'長城'} ? 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 接收一個字典或者字符串的查詢參數(shù),字典類型自動轉(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)
運行結(jié)果
......
......
'http://www.baidu.com/s?wd=%E9%95%BF%E5%9F%8E'
'utf-8'
200
使用response.text 時,Requests 會基于 HTTP 響應(yīng)的文本編碼自動解碼響應(yīng)內(nèi)容,大多數(shù) Unicode 字符集都能被無縫地解碼。
使用response.content 時,返回的是服務(wù)器響應(yīng)數(shù)據(jù)的原始二進制字節(jié)流,可以用來保存圖片等二進制文件。
POST方法
1.基本的POST的請求
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在跨請求的時候保持某些參數(shù),比如實現(xiàn)登錄后才能訪問其他頁面
# 1. 創(chuàng)建session對象,可以保存Cookie值 session = requests.session() ? # 2. 需要登錄的用戶名和密碼 data = {"username": "mxxxx", "password": "1233444"} ? # 3. 發(fā)送附帶用戶名和密碼的請求,并獲取登錄后的Cookie值,保存在ssion里 session.post("https://www.jianshu.com/sign_in", data=data) ? # 4. ssion包含用戶登錄后的Cookie值,可以直接訪問那些登錄后才可以訪問的頁面 response = session.get("https://www.jianshu.com/writer#/")
踩坑記要
1.在使用requests去請求一個接口時,出現(xiàn)報錯的情況,但是這個接口本身卻沒有問題。這是因為接口的請求參數(shù)有兩種情況:簡單類型(一般少于3個)和復(fù)雜對象類型。
解決方法:在headers中定義一下這兩種參數(shù)的類型
簡單類型:headers={"Content-Type": "application/x-www-form-urlencoded"}
復(fù)雜對象類型:headers={"Content-Type":application/json}
2.某些HTTPS請求存在 SSL證書驗證
解決方法:response = requests.get("https://www.baidu.com/", verify=False)
擴展
1.requests請求失敗后,增加重試機制(若失敗,將會重試3次)
request_retry = requests.adapatrs.HTTPAdapaters(max_retries=3) session.mount('https://',request_retry) ?
2.使用grequests實現(xiàn)異步請求
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實例來保持請求之間的cookies,但是有些特殊情況,需要使用自定義的cookies
我們使用Session實例來保持請求之間的cookies,但是有些特殊情況,需要使用自定義的cookies
# 自定義cookies cookie = {'guid':'5BF0FAB4-A7CF-463E-8C17-C1576fc7a9a8','uuid':'3ff5f4091f35a467'} ? session.post('http://', cookies=cookie)
4.統(tǒng)計一個API請求花費的時間
session.get(url).elapsed.total_seconds()?
5.設(shè)置請求超時
session.get(url, timeout=15)
6.文件上傳
Requests利用files作為參數(shù)模擬提交文件數(shù)據(jù)
file = {'file':open('test.bmp','rb')} ? #rb表示用二進制格式打開指定目錄下的文件,且用于只讀 r =requests.post('http://',files=file) print(r.text)
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python身份運算符is與is?not區(qū)別用法基礎(chǔ)教程
這篇文章主要為大家介紹了Python身份運算符is與is?not區(qū)別用法基礎(chǔ)教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06