首頁 > 軟體

request基本使用及各種請求方式引數的範例

2022-04-12 19:00:54

各種請求方式

pip3 install requests
>>> import requests
>>> r = requests.get('https://www.cnblogs.com')
>>> r = requests.post('https://www.cnblogs.com', data = {'key':'value'})
>>> r = requests.put('https://www.cnblogs.com', data = {'key':'value'})
>>> r = requests.delete('https://www.cnblogs.com')
>>> r = requests.head('https://www.cnblogs.com')
>>> r = requests.options('https://www.cnblogs.com')

request各種引數

引數說明
params字典或位元組序列,作為引數增加到url中
data字典,位元組序列或檔案物件,作為request的內容
jsonJSON格式的資料,作為request的內容
headers字典,HTTP客製化頭
cookies字典或CookieJar, request中的cookie
auth元組,支援HTTp認證功能
files字典型別,傳輸檔案
timeout設定超時時間,秒為單位
proxies字典型別,設定存取代理伺服器,可以增加登入認證
allow_redirects重定向開關,預設為True
stream獲取內容立即下載開關,預設為True
verify認證SSL證書開關,預設為True
cert本地SSL證書路徑

request基本使用

import requests
response = requests.get('https://www.cnblogs.com/kermitjam/')
print(response.text)
print(respone.text)  # 響應體轉成str
print(respone.content)  # 響應體二進位制(圖片,視訊)
print(respone.status_code)  # 響應狀態碼
print(respone.headers)  # 響應頭
print(respone.cookies)  # 伺服器端返回的cookie
print(respone.cookies.get_dict())  # 轉成字典
print(respone.cookies.items())
print(respone.url)  # 當次請求的地址
print(respone.history)  # 如果有重定向,放到一個列表中.檢視上一次請求從哪裡來。(圖片防盜鏈)
print(respone.encoding)  # 編碼方式
print(respone.iter_content())  # 視訊,圖片迭代取值
content-length   # 檢視下載前檔案大小
response.iter_content() # 視訊,圖片迭代取值
with open("a.mp4",'wb') as f:
    for line in response.iter_content():
        f.write(line)

get請求攜帶引數

# 方式一:會轉碼,不推薦
response = requests.get('https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3')
# 方式二:推薦
response = requests.get('https://www.baidu.com/',params={'name':'美女','age':18})

get請求攜帶headers頭

respone = requests.get('http://127.0.0.1:8000/',params={'name':'美女','age':18},
                   headers={
                       # 標誌,什麼東西發出的請求,瀏覽器資訊,django框架,從哪取?(meta)
                       'User-Agent': 'request',
                       # 上一個頁面的地址,圖片防盜鏈
                       'Referer': 'xxx'
                   })
print(respone.status_code)

get請求攜帶cookie

帶cookie,隨機字串(使用者資訊:也代表session),不管後臺用的token認證,還是session認證

一旦登陸了,帶著cookie傳送請求,表示登陸了(下單,12306買票,評論)

# 第一種方式
ret = requests.get('http://127.0.0.1:8000/',params={'name':'美女','age':18},
                   headers={
                       'cookie': 'key3=value;key2=value',
                   })

# 第二種方式
ret = requests.get('http://127.0.0.1:8000/',params={'name':'美女','age':18},
                   cookies={"islogin":"xxx"})
print(ret.status_code)

post請求攜帶資料(註冊、登入)

# data:urlencoded編碼
ret = requests.post('http://127.0.0.1:8000/', data={'name': "jeff", 'age': 18})
# data:json編碼
import json
data = json.dumps({'name': "jeff", 'age': 18})
ret = requests.post('http://127.0.0.1:8000/', json=data)
print(ret)
# 注意:編碼格式是請求頭中帶的,所以可以手動修改,在headers中改

session物件

# session物件
session=requests.session()
# 跟requests.get/post用起來完全一樣,但是它處理了cookie
# 假設是一個登陸,並且成功
res = session.post('http://127.0.0.1:8000/')
# # 再向該網站發請求,就是登陸狀態,不需要手動攜帶cookie
res = session.get("http://127.0.0.1:8000/")
print(res)

亂碼問題

# 載入回來的頁面,列印出來,亂碼(我們用的是utf8編碼),如果網站用gbk,
ret = requests.get('http://127.0.0.1:8000/')
ret.encoding='gbk'  # 修改編碼
print(ret.apparent_encoding)  # 當前頁面的編碼
# ret.encoding = ret.apparent_encoding
print(ret.encoding)
print(ret.apparent_encoding)

解析json資料

# 返回資料,有可能是json格式,有可能是html格式
ret=requests.get('http://127.0.0.1:8000/')
# print(type(ret.text))
# print(ret.text)
a=ret.json()
print(a['name'])
print(type(a))

使用代理

代理簡單解釋:

代理其實就是一箇中介,A和B本來可以直連,中間插入一個C,C就是中介。
#高匿:伺服器端,根本不知道我是誰
#普通:伺服器端是能夠知道我的ip的
#http請求頭中:X-Forwarded-For:代理的過程

爬蟲使用正向代理好處:

1.突破頻率限制。做個代理池,每次請求都是不同的Ip,伺服器認為是不同的使用者

2.不會封自己的ip。

正向代理即是使用者端代理, 代理使用者端, 伺服器端不知道實際發起請求的使用者端.
反向代理即是伺服器端代理, 代理伺服器端, 使用者端不知道實際提供服務的伺服器端

ret = requests.get('https://www.pearvideo.com/', proxies={'http': '47.115.54.89'})
print(type(ret.text))
print(ret.text)

上傳檔案

# 爬蟲用的比較少,後臺寫服務
file = {'myfile': open("1.txt", 'rb')}
ret = requests.post('http://127.0.0.1:8000/', files=file)
print(ret.content)

以上就是request基本使用及各種請求方式引數的範例的詳細內容,更多關於request使用及請求方式引數的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com