O CoinGecko (e muitos sites modernos) bloqueia scraping simples com 403 Forbidden devido a:
- Detecção de bot via User-Agent desatualizado
- Falta de headers sec-ch-ua (Chrome moderno)
- Ausência de Referer natural
- Padrões de acesso não-humanos
- Proteções Cloudflare/bot-detection JS
headers = {
"User-Agent": "Mozilla/5.0 ... Chrome/131.0.0.0 ...", # Versão atual
"sec-ch-ua": '"Google Chrome";v="131", ...', # Client Hints
"sec-ch-ua-platform": '"Windows"',
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"Referer": "https://www.coingecko.com/", # Referer natural
}Impacto: Imita browser real, passa verificações básicas de bot.
# 1. Visitar homepage primeiro
session.get("https://www.coingecko.com/")
time.sleep(1.5)
# 2. Depois aceder à página da moeda
session.get(f"/en/coins/{coin_id}/historical_data")
time.sleep(1.0)
# 3. Finalmente fazer download
session.get(csv_link)Impacto: Cookies de sessão válidos, padrão de navegação humano.
session = requests.Session() # Mantém cookies entre requestsImpacto: Cloudflare/bot detection vê sessão contínua, não requests isolados.
time.sleep(1.5) # Homepage → página da moeda
time.sleep(1.0) # Página → downloadImpacto: Evita rate limiting, imita velocidade de leitura humana.
# Chrome headless com anti-detecção
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
})Impacto: Executa JavaScript real, bypassa proteções JS avançadas.
Requer:
pip install selenium
# E ChromeDriver no PATH ou webdriver-manager# 1. Descarregar manualmente de https://www.coingecko.com/en/coins/cardano/historical_data
# 2. Guardar como cardano/ada-usd-max.csv
# 3. Importar:
python -m services.coingecko_scraper --coin cardano --csv cardano/ada-usd-max.csv --allpython -m services.coingecko_scraper --coin bitcoin --days 30 --verbosepip install selenium
python -m services.coingecko_scraper --coin ethereum --selenium --all- Cloudflare Challenge activo - Requer resolução de CAPTCHA
- Rate limit agressivo - Múltiplos requests em curto tempo
- IP blacklistado - VPN/proxy pode ajudar
- JavaScript obfuscado - Selenium pode não ser suficiente
- API CoinGecko (Demo: 10-30 req/min, Pro: ilimitado)
- Download manual de CSVs do site (mais fiável)
- Outras fontes: CoinMarketCap, Messari, CryptoCompare
Causa: Headers insuficientes ou padrão detectado como bot.
Soluções:
- Usar
--selenium(bypass com browser real) - Adicionar delay maior:
time.sleep(3)antes do download - Usar proxy/VPN para mudar IP
- Download manual do CSV
Causa: CoinGecko lento ou rate limit temporário.
Soluções:
- Aumentar timeout:
timeout=60 - Tentar novamente mais tarde
- Usar CSV existente
Causa: Link incorreto ou página de erro.
Soluções:
- Verificar estrutura HTML do site (pode ter mudado)
- Usar Selenium para inspecionar página
- Download manual
- 2941 registos inseridos
- 2017-10-18 a 2025-11-05
- Tempo: ~52 min (taxa USD→EUR dinâmica)
- Tempo otimizado: ~30s (taxa fixa 0.92)
- 403 Forbidden com headers básicos
- Pendente teste com headers melhorados
- Alternativa: CSV manual recomendado
Para produção: usar CSV manual + import automático
- Descarregar CSVs manualmente 1x por semana
- Guardar em
cardano/,bitcoin/, etc. - Executar import automático:
python -m services.coingecko_scraper --coin cardano --csv cardano/ada-usd-max.csv --all
Vantagens:
- ✅ 100% fiável (sem bloqueios)
- ✅ Rápido (~30s para 2941 registos)
- ✅ Sem dependências externas (Selenium)
- ✅ Não viola ToS do CoinGecko
Desvantagens:
- ❌ Requer intervenção manual
- ❌ Não é tempo real (mas histórico não muda)