requests模組
(1)GET請求
(1)傳送get請求
import requests
url = "https://www.baidu.com/"
# 傳送請求獲取響應資料
response = requests.get(url)
- 其中,一些常用的屬性和方法包括:
status_code
: 響應的狀態碼,200表示請求成功,404表示頁面不存在等。text
: 響應的內容,通常是伺服器返回的HTML文字。json()
: 將響應的內容解析為JSON格式。
import requests
from fake_useragent import UserAgent
url = 'https://www.bqgbb.cc/'
headers = {
'User-Agent': UserAgent().random
}
res = requests.get(url=url, headers=headers)
response = res.text
print(response)
print(res.status_code) # 200
(2)get請求攜帶引數
-
傳送GET請求時,可以透過URL傳遞引數
- https://www.baidu.com/s?wd=周杰倫
-
如果需要傳遞引數,可以使用
params
引數來指定 -
params會自動幫我們在地址後面加一個問號,然後解析完加上我們定義的params引數,非常的方便
import requests
from fake_useragent import UserAgent
url = 'https://www.baidu.com/s'
headers = {
'User-Agent': UserAgent().random
}
params = {
'wd': '周杰倫'
}
res = requests.get(url=url, headers=headers, params=params)
print(res.text)
print(res.request.url)
# https://www.baidu.com/s?wd=%E5%91%A8%E6%9D%B0%E4%BC%A6
(3)get請求攜帶cookie
import requests
from fake_useragent import UserAgent
url = 'https://search.jd.com/Search'
headers = {
'User-Agent': UserAgent().random,
'Cookie': ''
}
params = {
'keyword': '手機'
}
res = requests.get(url=url, headers=headers, params=params)
print(res.text)
print(res.request.url)
# https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA
(2)POST請求
- POST請求的場景 一般都是用來登入的介面
(1)傳送POST請求
import requests
url = 'http://www.aa7a.cn/user.php'
data = {
'username': 'heart',
'password': '123',
'captcha': '3aeh',
'remember': '1',
'ref': 'http://www.aa7a.cn',
'act': 'act_login'
}
res = requests.post(url=url,json=data)
print(res.text)
(3)自動攜帶cookie的session物件
import requests
from fake_useragent import UserAgent
headers = {
'User-Agent': UserAgent().random,
}
url = "https://xueqiu.com/"
session = requests.Session()
response1 = session.get(url=url, headers=headers)
tag_url = "https://stock.xueqiu.com/v5/stock/batch/quote.json?symbol=SH000001,SZ399001,SZ399006,SH000688,SH000016,SH000300,BJ899050,HKHSI,HKHSCEI,HKHSTECH,.DJI,.IXIC,.INX"
response = session.get(url=tag_url, headers=headers)
print(response.text)
(4)響應的相關引數
(1)字串格式
response.text
將響應體轉換為字串形式。
import requests
response = requests.get('https://www.baidu.com')
data = response.text
print(data, type(data)) # <class 'str'>
(2)二進位制格式
response.content
: 獲取響應體的二進位制內容,適用於處理影像、影片等非文字型別的響應。(預設是16進位制)
import requests
response = requests.get('https://pic.netbian.com/uploads/allimg/240322/232300-171112098057a5.jpg')
data = response.content
print(data, type(data)) # <class 'bytes'>
(3)json格式
response.json()
:獲取json格式資料
import requests
from fake_useragent import UserAgent
headers = {
'User-Agent': UserAgent().random,
}
url = "https://xueqiu.com/"
session = requests.Session()
response1 = session.get(url=url, headers=headers)
tag_url = "https://stock.xueqiu.com/v5/stock/batch/quote.json?symbol=SH000001,SZ399001,SZ399006,SH000688,SH000016,SH000300,BJ899050,HKHSI,HKHSCEI,HKHSTECH,.DJI,.IXIC,.INX"
response = session.get(url=tag_url, headers=headers)
print(response.json(), type(response.json()))
# <class 'dict'>
(4)響應體的編碼格式
response.encoding
:獲取響應的編碼格式
import requests
url = 'https://www.baidu.com'
res = requests.get(url=url)
print(res.encoding) # ISO-8859-1
- 轉碼
import requests
url = 'https://www.baidu.com'
res = requests.get(url=url)
# 亂碼
print(res.text)
print(res.encoding) # ISO-8859-1
# 進行轉碼操作
res.encoding='utf-8'
print(res.text)
print(res.encoding) # utf-8
(5)響應體的狀態碼
status_code
:獲取響應的狀態碼
import requests
url = 'https://www.baidu.com'
res = requests.get(url=url)
print(res.status_code) # 200
(6)響應頭
response.headers
:獲取響應頭資訊,返回一個字典物件
import requests
url = 'https://www.baidu.com'
res = requests.get(url=url)
print(res.headers)
# {'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html', 'Date': 'Sat, 30 Mar 2024 08:02:34 GMT', 'Last-Modified': 'Mon, 23 Jan 2017 13:23:55 GMT', 'Pragma': 'no-cache', 'Server': 'bfe/1.0.8.18', 'Set-Cookie': 'BDORZ=27315; max-age=86400; domain=.baidu.com; path=/', 'Transfer-Encoding': 'chunked'}
(7)響應Cookie
response.cookies
: 獲取伺服器返回的cookie資訊。response.cookies.get_dict()
: 將cookie資訊轉換為字典形式。response.cookies.items()
: 獲取cookie資訊並以列表形式返回。
import requests
url = 'https://www.baidu.com'
res = requests.get(url=url)
print(res.cookies) # <RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
print(res.cookies.get_dict()) # {'BDORZ': '27315'}
print(res.cookies.items()) # [('BDORZ', '27315')]
(8)當前請求/響應物件的URL
response.url
: 獲取當前響應的URL。- 這是在完成HTTP請求並接收到伺服器響應後,實際返回的資源URL。
- 在重定向發生時,這個屬性會反映最終頁面的實際URL。
- 例如,如果你發起一個請求到某個網站A,但該網站隨後重定向到了網站B,那麼
response.url
將顯示網站B的URL。
response.request.url
: 獲取當前請求的URL。- 這是傳送HTTP請求時使用的原始URL,即你在發出請求時指定的URL。
- 無論是否發生重定向,這個屬性始終保持不變。
- 也就是說,它反映了你最初嘗試訪問的地址。
import requests
url = 'https://www.baidu.com'
response = requests.get(url=url)
print(response.url)
print(response.request.url)
(9)當前請求的重定向ULR
response.history
: 如果有重定向,返回一個列表,包含所有經過的重定向URL。
import requests
url = 'https://www.baidu.com'
response = requests.get(url=url)
print(response.history)
(10)迭代獲取二進位制資料
response.iter_content()
:迭代獲取響應內容(適用於處理影片、圖片等二進位制資料)
import requests
tag_url = "https://pic.netbian.com/uploads/allimg/240322/232300-171112098057a5.jpg"
response = requests.get(tag_url)
# 開啟本地的檔案路徑,寫入二進位制資料必須用 wb 模式
file_path = "./a.jpg"
with open(file_path, 'wb') as f:
# 迴圈獲取響應資料中的二進位制資料,每次只獲取 1024 個位元組
for chunk in response.iter_content(chunk_size=1024):
# 如果存在資料,則進行檔案資料的寫入
if chunk:
f.write(chunk)
(5)SSL認證
- 會報錯,因為沒有證書
import requests
url = 'https://ssr2.scrape.center/'
response = requests.get(url)
print(response.status_code)
- 不認證證書
verify=False
import requests
url = 'https://ssr2.scrape.center/'
response = requests.get(url,verify=False)
print(response.status_code)# 200
(6)使用代理
- 格式
proxies = {'協議':'協議://IP:埠號'}
import requests
from fake_useragent import UserAgent
proxies = {
'http': 'http://221.6.139.190:9002'
}
url = 'http://httpbin.org/get'
headers = {
'User-Agent': UserAgent().random
}
response = requests.get(url=url,headers=headers,proxies=proxies,timeout=3)
print(response.text)
# 沒有代理
# "origin": "103.151.172.28",
# 新增了代理
# "origin": "221.6.139.190"