
Python 之所以被稱為「膠水語言」,很大一部分原因是它能輕易地透過網路與其他系統溝通。無論是抓取網頁資料 (爬蟲),還是呼叫 Google 已經訓練好的 AI 模型 (API),都離不開 HTTP 請求。
雖然 Python 內建有 urllib 模組,但它非常難用。今天我們要學的是 Python 社群的標準配備——requests 庫。
“Requests: HTTP for Humans” —— 它的官方口號說明了一切。
1. 準備工作
安裝 requests:
pip install requests
2. GET 請求:獲取資料
最常見的操作是從伺服器取得資料。
import requests
# 這裡使用 GitHub 的公開 API 作為範例
url = "https://api.github.com/events"
response = requests.get(url)
# 檢查狀態碼 (200 代表成功)
print(f"Status Code: {response.status_code}")
if response.status_code == 200:
# 讀取文字內容
# print(response.text)
# 直接解析 JSON (Python 會轉成 List 或 Dict)
data = response.json()
print(f"取得了 {len(data)} 筆事件資料")
print(f"第一筆事件類型: {data[0]['type']}")
else:
print("請求失敗")
3. 處理 Query Parameters
如果 URL 帶有參數 (例如 search?q=python&page=1),不需要手動拼字串,requests 會幫你處理編碼問題。
search_url = "https://httpbin.org/get"
params = {
"q": "python tutorial",
"page": 2,
"lang": "zh-tw"
}
resp = requests.get(search_url, params=params)
# 自動拼好的 URL
print(resp.url)
# https://httpbin.org/get?q=python+tutorial&page=2&lang=zh-tw
4. POST 請求:傳送資料
當我們要提交表單或上傳資料時,會使用 POST 方法。
post_url = "https://httpbin.org/post"
payload = {
"username": "weichih",
"message": "Hello Server!"
}
# 1. 傳送 Form Data (像網頁表單)
# resp = requests.post(post_url, data=payload)
# 2. 傳送 JSON Data (現代 API 常用)
resp = requests.post(post_url, json=payload)
print(resp.json()['json']) # 伺服器回傳我們剛剛送過去的資料
5. Headers:偽裝與授權
很多網站會檢查 User-Agent 來檔爬蟲,或者 API 需要 Authorization Token。這時我們需要自訂 Headers。
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...",
"Authorization": "Bearer YOUR_API_TOKEN"
}
resp = requests.get("https://api.github.com/user", headers=headers)
6. 錯誤處理
網路請求充滿變數 (斷網、伺服器掛掉),記得要處理異常。
try:
r = requests.get("https://non-existent-website.com", timeout=3)
r.raise_for_status() # 如果狀態碼不是 200,主動拋出異常
except requests.exceptions.Timeout:
print("連線逾時!")
except requests.exceptions.ConnectionError:
print("無法連上伺服器 (DNS 錯誤或斷網)")
except requests.exceptions.HTTPError as err:
print(f"HTTP 錯誤: {err}")
7. 總結
掌握 requests 讓你擁有獲取全世界資料的能力。
- GET: 拿資料 (
requests.get) - POST: 傳資料 (
requests.post) - JSON: 現代 API 的通用語言 (
resp.json()) - Headers: 身分證與通關密語
下一章,我們將進入 Batch 5 的最後一塊拼圖——Python 模組打包與虛擬環境管理,學會如何用 Poetry 打造專業的專案結構!
延伸閱讀:
- Requests 官方文件
- HTTP Status Codes (用貓咪圖記 HTTP 狀態碼)