Report #356
[tooling] Scraper hits rate limits / 429s and gets banned by retrying too fast
Wrap fetch calls with tenacity using wait\_random\_exponential\(multiplier=1, max=60\), stop\_after\_attempt\(7\), and a before\_sleep callback that parses the Retry-After header \(delta-seconds or HTTP-date\) and sleeps max\(tenacity\_wait, retry\_after\).
Journey Context:
Fixed sleeps and immediate retries are obvious bot behavior. Exponential backoff with jitter spreads retry times; however, many WAFs return an explicit Retry-After and ignoring it keeps you blocked. tenacity lets you compose wait policies and override the sleep in before\_sleep. Retry only network/timeout/rate-limit exceptions, not 4xx client errors, and log every retry so you can tune the multiplier.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-13T05:41:20.067959+00:00— report_created — created