目錄
requests模塊
緩存HTTP請求
生成輸出
首頁 後端開發 Python教學 用Python從HTTP API獲取數據

用Python從HTTP API獲取數據

Feb 10, 2025 pm 03:11 PM

Fetching Data from an HTTP API with Python

Python高效訪問HTTP API:requests庫與請求緩存

本文節選自《實用Python》,作者Stuart演示瞭如何利用Python和幾個第三方模塊輕鬆訪問HTTP API。

大多數情況下,處理第三方數據需要訪問HTTP API,即向設計為機器讀取而非人工讀取的網頁發出HTTP請求。 API數據通常採用機器可讀格式,通常為JSON或XML。 讓我們看看如何使用Python訪問HTTP API。

使用HTTP API的基本原則很簡單:

  1. 向API的URL發出HTTP請求,可能包括一些身份驗證信息(例如API密鑰)以證明我們已獲得授權。
  2. 獲取數據。
  3. 利用數據完成有用的操作。

Python標準庫提供了足夠的函數來完成所有這些操作,無需任何附加模塊,但如果我們使用幾個第三方模塊來簡化流程,將會使我們的工作更輕鬆。第一個是requests模塊。這是一個用於Python的HTTP庫,它使獲取HTTP數據比Python內置的urllib.request更便捷,可以使用python -m pip install requests安裝。

為了展示其易用性,我們將使用Pixabay的API(此處有文檔)。 Pixabay是一個圖片網站,所有圖片都可以重複使用,這使其成為一個非常方便的資源。我們將關注水果圖片。稍後在操作文件時,我們將使用收集到的水果圖片,但現在我們只想找到水果圖片。

首先,我們將快速查看Pixabay上有哪些圖片可用。我們將抓取一百張圖片,快速瀏覽它們,然後選擇我們想要的圖片。為此,我們需要一個Pixabay API密鑰,因此我們需要創建一個帳戶,然後從API文檔的“搜索圖片”部分獲取密鑰。

requests模塊

使用requests模塊向API發出HTTP請求的基本版本包括構建HTTP URL、發出請求以及讀取響應。此處,響應採用JSON格式。 requests模塊使每個步驟都非常簡單。 API參數是一個Python字典,get()函數發出調用,如果API返回JSON,requests會將其作為響應中的.json提供。因此,簡單的調用如下所示:

import requests

PIXABAY_API_KEY = "11111111-7777777777777777777777777"

base_url = "https://pixabay.com/api/"
base_params = {
    "key": PIXABAY_API_KEY,
    "q": "fruit",
    "image_type": "photo",
    "category": "food",
    "safesearch": "true"
}

response = requests.get(base_url, params=base_params)
results = response.json()
登入後複製

這將返回一個Python對象,正如API文檔所建議的那樣,我們可以查看其各個部分:

為了獲取一百個結果,我們可以簡單地決定進行五次調用,每次調用獲取20個結果,但這不夠穩健。更好的方法是循環請求頁面,直到獲得所需的一百個結果,然後停止。這可以防止在Pixabay更改默認結果數量(例如更改為15)時出現問題。它還可以讓我們處理搜索詞沒有一百張圖片的情況。因此,我們使用一個while循環,每次遞增頁碼,如果我們已經達到100張圖片,或者沒有圖片可檢索,我們就退出循環:

緩存HTTP請求

避免多次向HTTP API發出相同的請求是個好主意。許多API都有使用限制,以避免被請求者過度使用,請求需要花費時間和精力。我們應該盡量避免重複之前的請求。幸運的是,在使用Python的requests模塊時,有一種有用的方法可以做到這一點:使用python -m pip install requests-cache安裝requests-cache。這將無縫記錄我們進行的任何HTTP調用並保存結果。然後,稍後如果我們再次進行相同的調用,我們將獲得本地保存的結果,而無需再次訪問API。這節省了時間和帶寬。要使用requests_cache,請導入它並創建一個CachedSession,然後使用session.get而不是requests.get來獲取URL,我們將無需額外努力即可獲得緩存的好處:

生成輸出

為了查看查詢結果,我們需要在某個地方顯示圖片。一種便捷的方法是創建一個簡單的HTML頁面來顯示每個圖片。 Pixabay提供了每個圖片的小縮略圖,它在API響應中稱為previewURL,因此我們可以創建一個HTML頁面來顯示所有這些縮略圖,並將它們鏈接到主要Pixabay頁面——我們可以從中選擇下載我們想要的圖片並為攝影師署名。因此,頁面中的每個圖片可能如下所示:

我們可以使用列表推導式從images列表構建它,然後使用"n".join()將所有結果連接成一個大的字符串:

然後,如果我們寫出一個包含該列表的非常簡單的HTML頁面,則很容易在Web瀏覽器中打開它,快速查看我們從API獲得的所有搜索結果,並單擊其中任何一個跳轉到完整的Pixabay頁面進行下載:

Fetching Data from an HTTP API with Python

本文節選自《實用Python》,可在SitePoint Premium和電子書零售商處購買。

(以下為FAQs,已根據原文進行改寫和精簡)

關於使用Python的HTTP API獲取數據的常見問題 (FAQs)

  • HTTP和HTTPS的區別是什麼? HTTP是超文本傳輸協議,HTTPS是安全超文本傳輸協議。主要區別在於HTTPS使用SSL證書建立服務器和客戶端之間安全的加密連接,而HTTP則沒有。這使得HTTPS在傳輸敏感數據(如信用卡信息或登錄憑據)時更安全。

  • Python中HTTP是如何工作的? Python中可以使用多個庫發出HTTP請求,最常用的是requests。該庫允許您發送HTTP請求並處理響應,包括處理Cookie、表單數據、多部分文件等等。它是與Web服務交互的強大工具,可用於各種應用程序。

  • 常見的HTTP方法有哪些?如何在Python中使用它們? 最常見的HTTP方法是GET、POST、PUT、DELETE、HEAD、OPTIONS和PATCH。在Python中,可以使用requests庫使用這些方法。例如,要發送GET請求,可以使用requests.get(url),要發送POST請求,可以使用requests.post(url, data)

  • 如何在Python中處理HTTP響應? 當您使用requests庫在Python中發送HTTP請求時,會得到一個Response對象。此對象包含服務器對您請求的響應。如果響應採用JSON格式,您可以使用response.textresponse.json()訪問響應的內容。您還可以使用response.status_code檢查響應的狀態代碼。

  • 如何在Python中使用HTTP標頭? 通過將HTTP標頭作為字典傳遞給requests函數的headers參數,可以在Python中使用它們。例如,requests.get(url, headers={'User-Agent': 'my-app'})。標頭可用於提供有關請求或客戶端的其他信息,例如用戶代理、內容類型、授權等等。

  • 如何在Python中處理Cookie? 可以使用Response對象的cookies屬性在Python中處理Cookie。您可以使用response.cookies訪問服務器發送的Cookie,並通過將Cookie作為字典傳遞給requests函數的cookies參數來將Cookie發送到服務器。

  • 如何在Python中使用POST請求發送表單數據? 通過將表單數據作為字典傳遞給requests.post函數的data參數,可以在Python中使用POST請求發送它。例如,requests.post(url, data={'key': 'value'})requests庫將自動以正確的格式編碼數據。

  • 如何在Python中使用POST請求發送文件? 通過將文件作為字典傳遞給requests.post函數的files參數,可以在Python中使用POST請求發送文件。字典應包含文件字段的名稱作為鍵,以及包含文件名和文件對象的元組作為值。

  • 如何處理requests庫在Python中的錯誤和異常? Python中的requests庫會針對某些類型的錯誤(例如網絡錯誤或超時)引發異常。您可以使用try/except塊捕獲這些異常並適當地處理它們。您還可以檢查響應的狀態代碼來處理HTTP錯誤。

  • 如何在Python中發出異步HTTP請求? 可以使用aiohttp庫在Python中發出異步HTTP請求。該庫允許您異步發送HTTP請求和處理響應,這在處理大量請求時可以顯著提高應用程序的性能。

以上是用Python從HTTP API獲取數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Python vs.C:申請和用例 Python vs.C:申請和用例 Apr 12, 2025 am 12:01 AM

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

您可以在2小時內學到多少python? 您可以在2小時內學到多少python? Apr 09, 2025 pm 04:33 PM

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

Python:遊戲,Guis等 Python:遊戲,Guis等 Apr 13, 2025 am 12:14 AM

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

2小時的Python計劃:一種現實的方法 2小時的Python計劃:一種現實的方法 Apr 11, 2025 am 12:04 AM

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python:探索其主要應用程序 Python:探索其主要應用程序 Apr 10, 2025 am 09:41 AM

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

Python與C:學習曲線和易用性 Python與C:學習曲線和易用性 Apr 19, 2025 am 12:20 AM

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

Python和時間:充分利用您的學習時間 Python和時間:充分利用您的學習時間 Apr 14, 2025 am 12:02 AM

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python:自動化,腳本和任務管理 Python:自動化,腳本和任務管理 Apr 16, 2025 am 12:14 AM

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

See all articles