Python高效訪問HTTP API:requests庫與請求緩存
本文節選自《實用Python》,作者Stuart演示瞭如何利用Python和幾個第三方模塊輕鬆訪問HTTP API。
大多數情況下,處理第三方數據需要訪問HTTP API,即向設計為機器讀取而非人工讀取的網頁發出HTTP請求。 API數據通常採用機器可讀格式,通常為JSON或XML。 讓我們看看如何使用Python訪問HTTP API。
使用HTTP API的基本原則很簡單:
- 向API的URL發出HTTP請求,可能包括一些身份驗證信息(例如API密鑰)以證明我們已獲得授權。
- 獲取數據。
- 利用數據完成有用的操作。
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頁面進行下載:
本文節選自《實用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.text
或response.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中文網其他相關文章!

Python和C 各有優勢,選擇應基於項目需求。 1)Python適合快速開發和數據處理,因其簡潔語法和動態類型。 2)C 適用於高性能和系統編程,因其靜態類型和手動內存管理。

選擇Python還是C 取決於項目需求:1)如果需要快速開發、數據處理和原型設計,選擇Python;2)如果需要高性能、低延遲和接近硬件的控制,選擇C 。

通過每天投入2小時的Python學習,可以有效提升編程技能。 1.學習新知識:閱讀文檔或觀看教程。 2.實踐:編寫代碼和完成練習。 3.複習:鞏固所學內容。 4.項目實踐:應用所學於實際項目中。這樣的結構化學習計劃能幫助你係統掌握Python並實現職業目標。

在兩小時內高效學習Python的方法包括:1.回顧基礎知識,確保熟悉Python的安裝和基本語法;2.理解Python的核心概念,如變量、列表、函數等;3.通過使用示例掌握基本和高級用法;4.學習常見錯誤與調試技巧;5.應用性能優化與最佳實踐,如使用列表推導式和遵循PEP8風格指南。

Python適合初學者和數據科學,C 適用於系統編程和遊戲開發。 1.Python簡潔易用,適用於數據科學和Web開發。 2.C 提供高性能和控制力,適用於遊戲開發和系統編程。選擇應基於項目需求和個人興趣。

Python更適合數據科學和快速開發,C 更適合高性能和系統編程。 1.Python語法簡潔,易於學習,適用於數據處理和科學計算。 2.C 語法複雜,但性能優越,常用於遊戲開發和系統編程。

每天投入兩小時學習Python是可行的。 1.學習新知識:用一小時學習新概念,如列表和字典。 2.實踐和練習:用一小時進行編程練習,如編寫小程序。通過合理規劃和堅持不懈,你可以在短時間內掌握Python的核心概念。

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

Atom編輯器mac版下載
最受歡迎的的開源編輯器