Skip to content

Web Scraping

🕸️ . Web Scraping & Rate Limiting

スクレイピングにおける「マナー(アクセス頻度制限)」と「効率(キャッシュ)」を同時に実現します。

import requests
import beautyspot as bs

# TPM (Tokens Per Minute) = 20 -> 3秒に1回のリクエスト制限
spot = bs.Spot("crawler", tpm=20)

@spot.mark
@spot.consume(cost=1)
def fetch_page(url: str):
    print(f"Accessing {url}...")
    resp = requests.get(url)
    resp.raise_for_status()
    return resp.text

# 連続で呼び出しても、自動的に待機時間が挿入されます
urls = [f"[https://example.com/page/](https://example.com/page/){i}" for i in range(10)]
for u in urls:
    html = fetch_page(u)