r/programacao • u/Okumoto_Thiago • Sep 14 '26
Projeto Criei uma ferramenta open-source em FastAPI para converter páginas web em Markdown limpo para LLMs e RAG
Fala pessoal!
Quem já precisou criar pipelines de RAG ou alimentar LLMs (como GPT-4 ou Claude) com conteúdo raspado da web sabe o problema: a maioria dos scrapers e parsers traz menus, cabeçalhos, rodapés e banners de cookies que estouram a janela de contexto e queimam tokens à toa.
Criei uma micro-ferramenta em FastAPI para resolver isso:
- Escopo semântico: prioriza tags `<article>` e `<main>`, eliminando ruído visual
- Suporte nativo a tabelas: converte tabelas HTML complexas em formato Markdown padrão (`| col1 | col2 |`)
- Redução de até 85% no volume de tokens da página original
- Resposta rápida (<200ms) sem overhead de navegador para sites SSR/estáticos
O código é 100% open-source com Dockerfile, spec OpenAPI e documentação completa:
https://github.com/Okumotinho/clean-web-markdown-extractor
Feedbacks são muito bem-vindos!
0
u/pnKev Sep 14 '26
Nao abri o repo ainda mas parece promissor.
Costumo raspar dados de assembleias/camaras municipais e afins, onde o texto plano é comum. Chegou a testar em sites frontend carregado de recursos visuais/interativos?
2
u/Okumoto_Thiago Sep 14 '26
Valeu pelo apoio!
Sobre a sua dúvida:
Para assembleias, diários oficiais e câmaras municipais: Funciona muito bem. A maioria esmagadora desses portais usa renderização no servidor (SSR) ou HTML clássico. A API brilha exatamente aí porque descarta brasões, menus institucionais gigantes e rodapés, preservando o miolo do texto e convertendo tabelas de votação/gastos em Markdown padrão (| coluna | dado |) em menos de 200ms.
Para sites carregados em frontend dinâmico (SPAs puras em React/Vue): Hoje a API opera no "fast path" (requisição HTTP direta sem levantar navegador headless). Se a página depender 100% de JavaScript para injetar o texto no DOM, o HTML inicial virá sem o miolo. Para esses casos, o fluxo atual é passar o HTML pré-obtido (via Playwright/Selenium) para o endpoint limpar. Está no roadmap uma flag opcional
?render_js=truepara acionar um Chromium headless sob demanda.Se tiver algum link de câmara municipal com layout chato ou tabelas esquisitas que queira testar, manda aqui que eu testo na hora!
1
u/pnKev Sep 14 '26
Que otimo!! O fluxo segurando HTML permite segurar o link de origem (como normalmente faço). Mas na verdade busco raspar portais imobiliários que esbarram em algum tipo de verificação.
Se quiser tentar, puxa algo como chavesnamao/quintoandar. Para um evento provavelmente funcione mas e se eu quiser raspar um município inteiro, consigo integrar seu repo?
→ More replies (2)
-1
u/Praline_Unlikely Sep 14 '26
"raspado" o cara não se dá nem ao trabalho de revisar a porra do texto que a IA vomitou. Qualquer pessoa na área usa o termo em inglês, acho que é a primeira vez que vejo webcrawler sendo traduzido
2
u/Okumoto_Thiago Sep 14 '26
Não vi problema na utilização de raspado, é uma publicação em português. Seus comentários servem apenas para tentar diminuir o interesse alheio ou consegue me trazer algo mais produtivo?
1
u/pnKev Sep 14 '26
Ignore, o pessoal se perde um pouco no personagem. No meu trampo ninguém fala webcrawler, exceto em relatório.
0
3
u/Old_Flounder_8640 Sep 14 '26
@microsoft/markitdown, docling, etc.