最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python Requests庫入門實戰(zhàn)演示

 更新時間:2026年02月07日 10:25:38   作者:青春不朽512  
Requests是Python中最流行的HTTP客戶端庫,它的設(shè)計哲學是"為人類設(shè)計",它將復雜的HTTP協(xié)議細節(jié)封裝在簡潔的API之下,讓開發(fā)者能夠用最少的代碼完成網(wǎng)絡(luò)請求,本文介紹Python Requests庫入門指南,感興趣的朋友跟隨小編一起看看吧

1. 庫的概覽與核心價值

想象一下,在網(wǎng)絡(luò)世界中,如果你想與各種網(wǎng)站和服務(wù)進行通信,就像是用傳統(tǒng)的信件往來。你需要手動打包數(shù)據(jù)、編寫地址、處理回復編碼,這些繁瑣的細節(jié)會讓簡單的任務(wù)變得復雜。requests庫正是為解決這些問題而生的工具。

Requests是Python中最流行的HTTP客戶端庫,它的設(shè)計哲學是"為人類設(shè)計"。它將復雜的HTTP協(xié)議細節(jié)封裝在簡潔的API之下,讓開發(fā)者能夠用最少的代碼完成網(wǎng)絡(luò)請求。與Python標準庫中的urllib相比,Requests的使用體驗提升了90%以上——你不再需要手動處理URL編碼、表單數(shù)據(jù)序列化、連接池管理等底層細節(jié)。

Requests在Python生態(tài)系統(tǒng)中占據(jù)著不可或缺的地位。據(jù)PyPI官方統(tǒng)計,它的下載量每月超過10億次,超過50萬個開源項目依賴它。無論是調(diào)用REST API、構(gòu)建網(wǎng)絡(luò)爬蟲、自動化測試,還是開發(fā)微服務(wù)客戶端,Requests都是首選工具。它支持HTTP/1.1的所有特性,包括連接池管理、Cookie持久化、SSL驗證、自動內(nèi)容解碼等,讓HTTP請求變得前所未有的簡單。

2. 環(huán)境搭建與"Hello, World"

安裝說明

Requests不是Python標準庫的一部分,需要通過包管理器安裝:

# 使用pip安裝(推薦)
pip install requests
# 使用conda安裝
conda install requests
# 使用Python模塊方式安裝
python -m pip install requests

Requests官方支持Python 3.9+版本,同時也兼容PyPy解釋器。如果在安裝過程中遇到權(quán)限問題,可以嘗試使用--user參數(shù)或創(chuàng)建虛擬環(huán)境。

最簡示例

以下是一個簡單的"Hello, World"示例,展示如何發(fā)送GET請求并獲取響應(yīng):

import requests
# 發(fā)送GET請求到GitHub API
response = requests.get('https://api.github.com/events')
# 打印響應(yīng)狀態(tài)碼
print(f"狀態(tài)碼: {response.status_code}")
# 打印響應(yīng)內(nèi)容的前100個字符
print(f"響應(yīng)內(nèi)容: {response.text[:100]}")

逐行解釋

  1. import requests - 導入Requests庫,使其功能在當前腳本中可用。
  2. response = requests.get('https://api.github.com/events') - 調(diào)用get()方法向GitHub API發(fā)送GET請求,返回的Response對象包含了服務(wù)器的全部響應(yīng)信息。
  3. print(f"狀態(tài)碼: {response.status_code}") - 訪問Response對象的status_code屬性,獲取HTTP狀態(tài)碼(200表示成功)。
  4. print(f"響應(yīng)內(nèi)容: {response.text[:100]}") - 通過text屬性獲取響應(yīng)的文本內(nèi)容,并切片顯示前100個字符。

運行結(jié)果

程序運行后會輸出類似以下內(nèi)容:

狀態(tài)碼: 200
響應(yīng)內(nèi)容: [{"id":"25698765432","type":"PushEvent","actor":{"id":12345678,"login":"userna

這個簡單的例子展示了Requests的核心優(yōu)勢:用三行代碼就完成了一次完整的HTTP請求,自動處理了連接建立、數(shù)據(jù)傳輸、響應(yīng)解碼等所有細節(jié)。

3. 核心概念解析

Requests庫圍繞幾個核心概念構(gòu)建,理解這些概念有助于你更靈活地使用它。

3.1 請求方法(Request Methods)

HTTP協(xié)議定義了多種請求方法,Requests為每種方法都提供了對應(yīng)的函數(shù):

  • requests.get() - 獲取資源
  • requests.post() - 提交數(shù)據(jù)
  • requests.put() - 更新資源(完整替換)
  • requests.patch() - 更新資源(部分修改)
  • requests.delete() - 刪除資源
  • requests.head() - 獲取響應(yīng)頭
  • requests.options() - 獲取服務(wù)器支持的方法

3.2 響應(yīng)對象(Response Object)

每次請求后,Requests都會返回一個Response對象,它包含了服務(wù)器的完整響應(yīng)信息:

  • response.status_code - HTTP狀態(tài)碼
  • response.text - 響應(yīng)的文本內(nèi)容(自動解碼)
  • response.content - 響應(yīng)的字節(jié)內(nèi)容(原始二進制)
  • response.json() - 將JSON響應(yīng)解析為Python字典
  • response.headers - 響應(yīng)頭信息(字典形式)
  • response.cookies - 服務(wù)器設(shè)置的Cookie

3.3 會話對象(Session Object)

Session對象允許你在多個請求之間保持某些參數(shù)(如Cookies、認證信息),并復用TCP連接,顯著提高性能:

session = requests.Session()
session.headers.update({'User-Agent': 'My App'})
# 第一個請求會保存Cookies
response1 = session.get('https://httpbin.org/cookies/set/sessionid/123')
# 第二個請求會自動攜帶之前保存的Cookies
response2 = session.get('https://httpbin.org/cookies')

概念關(guān)系圖

這個圖表展示了Requests庫的核心概念及其關(guān)系:請求方法用于發(fā)送請求,響應(yīng)對象用于接收和處理服務(wù)器的回應(yīng),而會話對象則在多個請求之間提供狀態(tài)保持和連接復用。

4. 實戰(zhàn)演練:解決一個典型問題

需求分析

假設(shè)我們需要開發(fā)一個天氣查詢應(yīng)用,能夠獲取指定城市的當前天氣信息。我們將使用免費的天氣API,通過發(fā)送HTTP請求來獲取數(shù)據(jù),并解析返回的JSON響應(yīng)。

方案設(shè)計

這個項目將展示Requests庫的幾個核心功能:

  1. 使用requests.get()發(fā)送帶參數(shù)的GET請求
  2. 通過params參數(shù)傳遞查詢參數(shù)(城市名稱)
  3. 使用response.json()解析JSON響應(yīng)
  4. 實現(xiàn)錯誤處理和異常捕獲
  5. 展示響應(yīng)數(shù)據(jù)的提取和格式化

代碼實現(xiàn)

import requests
from requests.exceptions import RequestException
def get_weather(city):
    """
    獲取指定城市的天氣信息
    Args:
        city (str): 城市名稱,例如"Beijing"或"Shanghai"
    Returns:
        dict: 包含天氣信息的字典,失敗時返回None
    """
    # 使用免費的天氣API(示例使用httpbin.org模擬)
    base_url = "https://httpbin.org/get"
    params = {
        'city': city,
        'units': 'metric'
    }
    try:
        # 發(fā)送GET請求,設(shè)置超時時間為5秒
        response = requests.get(base_url, params=params, timeout=5)
        # 檢查響應(yīng)狀態(tài)碼,如果不是2xx則拋出異常
        response.raise_for_status()
        # 解析JSON響應(yīng)
        data = response.json()
        # 提取天氣信息(這里模擬真實API的數(shù)據(jù)結(jié)構(gòu))
        weather_info = {
            'city': data.get('args', {}).get('city', city),
            'temperature': 25,  # 模擬數(shù)據(jù)
            'condition': '晴朗',
            'humidity': 45,
            'wind_speed': 3.2
        }
        return weather_info
    except requests.exceptions.Timeout:
        print(f"錯誤: 請求超時,無法獲取{city}的天氣信息")
    except requests.exceptions.HTTPError as err:
        print(f"HTTP錯誤: {err.response.status_code}")
    except requests.exceptions.RequestException as err:
        print(f"請求出錯: {err}")
    return None
def main():
    """主函數(shù):獲取并顯示多個城市的天氣"""
    cities = ['Beijing', 'Shanghai', 'Guangzhou']
    print("=== 天氣查詢系統(tǒng) ===\n")
    for city in cities:
        print(f"正在查詢 {city} 的天氣...")
        weather = get_weather(city)
        if weather:
            print(f"\n{weather['city']} 天氣信息:")
            print(f"  溫度: {weather['temperature']}°C")
            print(f"  天氣: {weather['condition']}")
            print(f"  濕度: {weather['humidity']}%")
            print(f"  風速: {weather['wind_speed']} m/s")
        print("-" * 40)
if __name__ == '__main__':
    main()

運行說明

  1. 確保已安裝Requests庫: pip install requests
  2. 將代碼保存為weather_app.py
  3. 運行程序: python weather_app.py

程序會依次查詢?nèi)齻€城市的天氣信息,并格式化輸出結(jié)果。雖然示例使用了httpbin.org模擬數(shù)據(jù),但代碼結(jié)構(gòu)可以直接適配真實的天氣API(如OpenWeatherMap、和風天氣等),只需修改base_url和數(shù)據(jù)提取邏輯即可。

關(guān)鍵點解析

  • 參數(shù)傳遞: 使用params字典傳遞查詢參數(shù),Requests會自動進行URL編碼
  • 超時設(shè)置: timeout=5參數(shù)防止請求無限期等待
  • 錯誤處理: 使用raise_for_status()自動檢查狀態(tài)碼,并捕獲各類異常
  • JSON解析: response.json()將JSON響應(yīng)直接轉(zhuǎn)換為Python字典
  • 模塊化設(shè)計: 將核心功能封裝為函數(shù),便于復用和測試

5. 最佳實踐與常見陷阱

常見錯誤及規(guī)避方法

錯誤1:不檢查狀態(tài)碼

# ? 錯誤做法
response = requests.get('https://api.example.com/data')
data = response.json()  # 如果狀態(tài)碼不是200,這里可能拋出異常
# ? 正確做法
response = requests.get('https://api.example.com/data')
response.raise_for_status()  # 檢查狀態(tài)碼,非2xx時拋出HTTPError
data = response.json()

錯誤2:不設(shè)置超時時間

# ? 錯誤做法
response = requests.get('https://api.example.com/data')
# 如果網(wǎng)絡(luò)故障或服務(wù)器無響應(yīng),程序會無限期等待
# ? 正確做法
response = requests.get('https://api.example.com/data', timeout=10)
# 10秒后超時,拋出Timeout異常

錯誤3:在循環(huán)中重復創(chuàng)建會話

# ? 錯誤做法
for url in url_list:
    response = requests.get(url)  # 每次都建立新連接,效率低下
# ? 正確做法
with requests.Session() as session:
    for url in url_list:
        response = session.get(url)  # 復用連接,性能更高

最佳實踐建議

  • 始終使用會話(Session): 對于向同一域名發(fā)送多個請求的場景,使用Session可以復用TCP連接,減少握手開銷,提高性能。
  • 合理設(shè)置超時: 建議為所有請求設(shè)置超時參數(shù),可以使用元組分別設(shè)置連接超時和讀取超時,例如timeout=(3, 10)。
  • 處理JSON解析異常: 并非所有API響應(yīng)都是有效的JSON,使用response.json()時應(yīng)該捕獲JSONDecodeError:
import json
try:
    data = response.json()
except json.JSONDecodeError:
    print("響應(yīng)不是有效的JSON格式")
    data = None
  1. 使用User-Agent標識: 某些網(wǎng)站會檢查請求頭中的User-Agent,建議設(shè)置一個合理的標識:
headers = {
    'User-Agent': 'MyWeatherApp/1.0 (https://myapp.com)'
}
response = requests.get(url, headers=headers)
  1. HTTPS證書驗證: 生產(chǎn)環(huán)境中應(yīng)該驗證SSL證書,僅在測試環(huán)境或特定場景下禁用:
# 生產(chǎn)環(huán)境:驗證證書(默認行為)
response = requests.get('https://example.com')
# 測試環(huán)境:禁用證書驗證
response = requests.get('https://example.com', verify=False)
  1. 使用環(huán)境變量管理敏感信息: API密鑰、令牌等敏感信息應(yīng)該存儲在環(huán)境變量中,而不是硬編碼在代碼里:
import os
api_key = os.environ.get('MY_API_KEY')
headers = {'Authorization': f'Bearer {api_key}'}

注意事項

  • Requests默認使用連接池,會自動處理Keep-Alive,無需手動管理連接
  • 下載大文件時,使用stream=True參數(shù)逐步讀取,避免內(nèi)存溢出
  • 處理重定向時,可以通過allow_redirects=False禁用自動重定向
  • 對于需要認證的API,優(yōu)先使用Session對象的auth參數(shù)或headers參數(shù),而不是在每個請求中重復設(shè)置

6. 進階指引

高級功能

Requests提供了許多高級功能,可以應(yīng)對復雜的HTTP交互場景:

  • 認證處理: 支持Basic認證、Digest認證、OAuth等多種認證方式
  • 代理配置: 通過proxies參數(shù)配置HTTP/SOCKS代理
  • 流式上傳/下載: 處理大文件傳輸時避免內(nèi)存問題
  • 事件鉤子: 在請求的不同階段注冊回調(diào)函數(shù)
  • 自定義適配器: 實現(xiàn)自定義的傳輸協(xié)議或連接邏輯

生態(tài)擴展

Requests的生態(tài)豐富,有許多擴展庫可以增強其功能:

  • requests-oauthlib: OAuth認證支持
  • requests-cache: 響應(yīng)緩存,減少重復請求
  • requests-toolbelt: 實用工具集合,如Multipart上傳、流式請求等
  • grequests: 基于gevent的異步請求
  • requests-threads: 多線程請求支持

學習路徑

如果你想深入學習Requests,建議按以下路徑進行:

  1. 掌握基礎(chǔ)API: 熟悉所有請求方法和Response對象的屬性
  2. 理解HTTP協(xié)議: 學習HTTP/1.1規(guī)范,理解狀態(tài)碼、請求頭、響應(yīng)頭的含義
  3. 探索高級特性: 研究Session對象、連接池、SSL驗證等高級功能
  4. 閱讀源代碼: Requests的代碼結(jié)構(gòu)清晰,閱讀源碼有助于理解其實現(xiàn)原理
  5. 實踐項目: 開發(fā)一個完整的爬蟲或API客戶端項目

學習資源

  • 官方文檔: https://docs.python-requests.org (最權(quán)威、最完整的資源)
  • GitHub倉庫: https://github.com/psf/requests (源碼、Issue、討論)
  • Stack Overflow: 搜索標簽[python-requests]找到常見問題的解答
  • 社區(qū)博客: 許多開發(fā)者分享了Requests的實戰(zhàn)經(jīng)驗和技巧

Requests庫的設(shè)計理念是"簡單即美",但它的背后是HTTP協(xié)議的復雜性和網(wǎng)絡(luò)編程的挑戰(zhàn)。掌握了Requests,你就掌握了與網(wǎng)絡(luò)世界溝通的基本技能。繼續(xù)探索,你會發(fā)現(xiàn)HTTP請求的世界遠比你想象的更加豐富和有趣。

到此這篇關(guān)于Python Requests庫入門指南的文章就介紹到這了,更多相關(guān)Python Requests庫入門內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python進行Restful?API開發(fā)實例詳解

    Python進行Restful?API開發(fā)實例詳解

    這篇文章主要介紹了Python進行Restful?API開發(fā)實例,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • python使用openpyxl實現(xiàn)對excel表格相對路徑的超鏈接的創(chuàng)建方式

    python使用openpyxl實現(xiàn)對excel表格相對路徑的超鏈接的創(chuàng)建方式

    這篇文章主要介紹了python使用openpyxl實現(xiàn)對excel表格相對路徑的超鏈接的創(chuàng)建方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Python腳本打包成可執(zhí)行文件過程解析

    Python腳本打包成可執(zhí)行文件過程解析

    這篇文章主要介紹了Python腳本打包成可執(zhí)行文件過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • PyTorch實現(xiàn)模型剪枝的方法

    PyTorch實現(xiàn)模型剪枝的方法

    剪枝是一種優(yōu)化模型的技術(shù),可以幫助減少模型的大小和計算量,同時保持模型的準確性,本文主要介紹了PyTorch實現(xiàn)模型剪枝的方法,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • python2中的中文亂碼

    python2中的中文亂碼

    這篇文章主要介紹了python2中的中文亂碼問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 如何使用Python?繪制瀑布圖

    如何使用Python?繪制瀑布圖

    這篇文章主要介紹了如何使用Python?繪制瀑布圖,我們一起了解瀑布圖的重要性,以及如何使用不同的繪圖庫繪制瀑布圖。瀑布圖是一種二維圖表,專門用于了解隨著時間或多個步驟或變量的增量正負變化的影響,下文更多詳細內(nèi)容需要的小伙伴可以參考一下
    2022-05-05
  • python 函數(shù)中的內(nèi)置函數(shù)及用法詳解

    python 函數(shù)中的內(nèi)置函數(shù)及用法詳解

    這篇文章主要介紹了python 函數(shù)中的內(nèi)置函數(shù) 及用法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • python爬蟲看看虎牙女主播中誰最“頂”步驟詳解

    python爬蟲看看虎牙女主播中誰最“頂”步驟詳解

    這篇文章主要介紹了python爬蟲看看虎牙女主播中誰最“頂”,本文分步驟通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 基于Python的PIL庫學習詳解

    基于Python的PIL庫學習詳解

    這篇文章主要介紹了基于Python的PIL庫學習詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • pygame學習筆記(3):運動速率、時間、事件、文字

    pygame學習筆記(3):運動速率、時間、事件、文字

    這篇文章主要介紹了pygame學習筆記(3):運動速率、時間、事件、文字,本文講解了運動速率、事件、字體及字符顯示等內(nèi)容,需要的朋友可以參考下
    2015-04-04

最新評論

开江县| 筠连县| 山东省| 漠河县| 昌江| 嘉黎县| 定远县| 陵水| 本溪| 枣庄市| 财经| 榆林市| 鄂托克前旗| 方山县| 堆龙德庆县| 麟游县| 景谷| 荥阳市| 克东县| 石渠县| 宣城市| 双辽市| 新宾| 万荣县| 卢氏县| 阳城县| 文安县| 龙山县| 长丰县| 边坝县| 水富县| 枣阳市| 石城县| 宽甸| 桂林市| 称多县| 诸暨市| 天峻县| 镇原县| 顺昌县| 始兴县|