API分頁
伺服器不會一次傳回百萬筆資料,因為:
- 傳輸很慢。
- Client 記憶體壓力大。
- Server 查詢成本高。
- 連線中斷要全部重來。
本 API 回傳流程:
不要只寫固定 for page in range(1, 6),因為資料總數可能改變。也要防止 API 異常造成無限迴圈,正式專案可設定最大頁數並驗證 total。
常見分頁還有:
- Offset/limit:
offset=100&limit=20。 - Cursor:伺服器傳回
next_cursor。 - Link Header:下一頁 URL 放在 Header。
Cursor 分頁較能應付資料持續新增,但不能隨意跳到第 100 頁。必須依文件實作。
"""使用 JSONPlaceholder 分頁取得全部文章資料。"""
import time
import requests
page = 1
all_posts = []
while True:
response = requests.get(
"https://jsonplaceholder.typicode.com/posts",
params={
"_page": page,
"_limit": 15,
},
timeout=(3.05, 10),
)
response.raise_for_status()
posts = response.json()
# 沒有資料代表已到最後一頁
if not posts:
break
all_posts.extend(posts)
print(f"第 {page} 頁取得 {len(posts)} 筆,累計 {len(all_posts)} 筆")
page += 1
time.sleep(0.1)
print("API 宣告總筆數:", response.headers.get("X-Total-Count"))
print("實際取得總筆數:", len(all_posts))