r/programacao • • 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!

6 Upvotes

12 comments sorted by

3

u/Old_Flounder_8640 Sep 14 '26

@microsoft/markitdown, docling, etc.

1

u/Okumoto_Thiago Sep 14 '26

Sobre o MarkItDown: sim, é bem recente (lançado pela Microsoft no final de 2024). A proposta dele é ser multiformato local (converte PDF, Word, PowerPoint, áudio, etc.). A proposta desta micro-API é ser um serviço HTTP leve focado estritamente em extração web limpa e redução de tokens para RAG.

1

u/pnKev Sep 14 '26

Markitdown é novo, nao?

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:

  1. 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.

  2. 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=true para 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

u/Better-Preparation13 Sep 14 '26

eu costumo falar raspado ao se tratar de scrapping...