O que é este projeto
O Eget Crawler é um framework de web scraping construído especificamente para alimentar aplicações de IA e pipelines RAG (Retrieval-Augmented Generation). Diferente de scrapers genéricos, cada decisão de design foi tomada pensando em como o conteúdo será consumido por modelos de linguagem.
O framework cuida de todo o ciclo: descoberta de URLs, extração de conteúdo, limpeza de HTML, conversão para markdown, geração de embeddings e armazenamento em vector stores. Tudo assíncrono, respeitando limites e pronto para escalar.
Crawling inteligente
O módulo de crawling vai além de seguir links. Ele entende a estrutura do site antes de começar a extrair conteúdo:
- Respeito ao robots.txt — parse automático de regras de exclusão antes de qualquer requisição
- Rate limiting adaptativo — ajusta a velocidade baseado em respostas 429 e headers Retry-After
- Deduplicação de URLs — normalização de URLs com remoção de parâmetros de tracking e fragmentos
- Parsing de sitemap — leitura de sitemap.xml e sitemap index para descoberta eficiente de páginas
- Filtros por profundidade — controle de profundidade máxima de crawling e padrões de URL
Exemplo: Configuração do crawler
Conversão para Markdown
HTML bruto não serve para RAG. O pipeline de conversão transforma páginas complexas em markdown limpo e estruturado, preservando a hierarquia semântica do conteúdo:
- Extração de conteúdo principal — algoritmo que identifica o bloco de conteúdo principal versus navegação, footer, sidebar e ads
- Remoção de boilerplate — scripts, estilos, cookies banners, pop-ups e elementos decorativos são descartados
- Preservação de estrutura — headings, listas, tabelas, blocos de código e links são convertidos fielmente
- Metadados extraídos — título, descrição, autor, data de publicação e tags são capturados separadamente
- Chunking inteligente — o markdown resultante é dividido em chunks semânticos respeitando limites de seção
Processamento assíncrono
Crawlear milhares de páginas de forma sequencial não escala. O Eget Crawler usa asyncio com um pool de workers configurável e gerenciamento de fila para maximizar throughput sem sobrecarregar o servidor alvo:
- Worker pool com asyncio — número configurável de workers concorrentes com semáforo
- Fila persistente — URLs pendentes são salvas em disco para retomada após interrupções
- Backpressure — o sistema desacelera automaticamente quando a fila de processamento cresce demais
- Retry com exponential backoff — requisições falhas são recolocadas na fila com delay crescente
Exemplo: Arquitetura assíncrona
Conteúdo dinâmico
Muitos sites modernos renderizam conteúdo via JavaScript. O Eget Crawler integra com Playwright para lidar com SPAs, páginas com lazy loading e conteúdo gerado dinamicamente:
- Playwright headless — Chromium controlado programaticamente para renderizar JavaScript completo
- Detecção automática — identifica quando uma página precisa de browser versus requisição HTTP simples
- Wait strategies — espera por seletores CSS, network idle ou timeout antes de extrair
- Interceptação de rede — bloqueia imagens, fonts e analytics para acelerar a renderização
- Pool de browsers — reutilização de instâncias Playwright para reduzir overhead de inicialização
Pipeline RAG
O conteúdo extraído e convertido em markdown precisa virar embeddings armazenados em um vector store para ser útil em aplicações RAG. O Eget Crawler oferece integração nativa com os principais vector databases:
- ChromaDB — armazenamento local, ideal para desenvolvimento e prototipação rápida
- Pinecone — vector store gerenciado para produção com escala horizontal
- Weaviate — suporte a busca híbrida (vetorial + keyword) com filtros por metadados
Pipeline completo: Crawl → Extract → Embed → Store
Monitoramento
Crawling em escala sem observabilidade é voar às cegas. O Eget Crawler expõe métricas Prometheus nativas que podem ser visualizadas em dashboards Grafana:
- pages_per_second — throughput real de páginas crawleadas por segundo
- error_rate — percentual de requisições com erro (4xx, 5xx, timeout)
- queue_depth — quantidade de URLs pendentes na fila de processamento
- embedding_latency_ms — latência P50/P95/P99 da geração de embeddings
- chunks_stored_total — contador de chunks inseridos no vector store
- active_workers — workers ativos versus configurados para identificar gargalos
As métricas são expostas no endpoint /metrics (porta 9090) e são compatíveis com qualquer stack de monitoramento baseada em Prometheus. Incluímos um dashboard Grafana pré-configurado no repositório.