trafilatura Rejeitou Mais Texto Secundário Rotulado do que o Readability nos Mesmos Arquivos de Teste

Última atualização em August 17, 2026
trafilatura Rejeitou Mais Texto Secundário Rotulado do que o Readability nos Mesmos Arquivos de Teste
Resumo com IA
trafilatura é um extrator de conteúdo em Python que não depende de navegador. Nos arquivos de teste rotulados deste artigo, o único concorrente com ele em qualidade de extração no mesmo HTML é o Mozilla Readability: o trafilatura deixou escapar 1 de 17 blocos anotados como boilerplate, enquanto o Readability deixou passar 5. Ferramentas com navegador entram aqui apenas no contexto de implantação e não foram testadas em qualidade nessas páginas. Sua função principal é extrair o conteúdo central: entra HTML, saem texto e metadados voltados para artigos, com os elementos periféricos da página filtrados por heurísticas. Ele consegue serializar a saída como JSON e outros formatos, mas não gera um esquema de linhas definido pelo usuário nem registros catalogados e tipados em sequência.

trafilatura é um extrator de conteúdo em Python que dispensa navegador. Nos conjuntos anotados usados neste artigo, o único concorrente com extração de qualidade equivalente no mesmo HTML é o Mozilla Readability: o trafilatura deixou escapar 1 de 17 unidades de boilerplate anotadas, enquanto o Readability deixou passar 5. As ferramentas que usam navegador aparecem apenas no contexto de infraestrutura de implantação e não foram testadas em relação à qualidade nestas páginas.

trafilatura title and 3/3 paragraphs retained

A função principal é extrair o conteúdo central: você fornece HTML e recebe texto e metadados com foco em artigo, com os elementos de interface da página filtrados por heurísticas. Ele pode serializar a saída em JSON e outros formatos, mas não gera um esquema de linhas definido pelo usuário nem registros tabulares repetidos e tipados. A versão testada foi a 2.1.0. Ele não executa JavaScript, e a comparação com o Readability mostra uma troca entre precisão e retenção, não uma vitória absoluta em todas as categorias.

Onde o trafilatura se encaixa — e o que ele não tenta fazer

O trafilatura se apresenta como uma ferramenta em Python e de linha de comando para coletar texto e metadados na web — crawling, scraping, extração — com saída em CSV, JSON, HTML, Markdown, TXT ou XML. É uma proposta ampla. Na prática, porém, a parte realmente forte da ferramenta é mais estreita e precisa: ela recebe um documento HTML e devolve o conteúdo principal, sem os elementos de navegação e decoração da página.

System diagram: Where trafilatura fits, and what it refuses to do

Vale entender o modelo mental, porque ele explica tanto a força quanto o limite da ferramenta. A maioria dos scrapers apontados para uma página é guiada por seletores — você diz “pegue o elemento com a classe product-price” e eles retornam o que estiver ali. O trafilatura funciona ao contrário. Ele lê o documento inteiro e decide quais blocos são o artigo de fato e quais são boilerplate, usando heurísticas de conteúdo em vez de um seletor escrito por você. É por isso que ele não precisa de regras específicas por site para limpar uma página. E é exatamente por isso que não consegue entregar um catálogo estruturado: não há esquema, nem linhas tipadas, apenas “aqui está o texto relevante”. É um extrator, não um parser orientado por alvo.

Ele também não exige o download separado de um runtime de navegador. A árvore de dependências inclui wheels de plataforma como lxml, então “não baixar navegador” não deve ser confundido com instalação apenas em código-fonte ou sem código nativo.

Instalação: poucas dependências, sem navegador

pip install trafilatura em um virtualenv novo com Python 3.14 instalou 17 pacotes; o maior wheel registrado foi o lxml, com 8,6 MB, conforme pip-install-trafilatura.log. Não foi necessária nenhuma instalação separada de navegador nem comando pós-instalação para baixá-lo.

Em escala, o pacote Scrapling nesta mesma base de pesquisa precisou de quatro execuções separadas de pip para fazer os fetchers funcionarem e terminou com 26 pacotes, dois deles wheels do driver do Playwright de 42,2 MB (tools/scrapling/artifacts/logs/pip-install-scrapling.log) — e isso antes de baixar qualquer binário de navegador. O pacote Crawlee mediu esse download separado do Chromium em cerca de 81,7 MiB (tools/crawlee/research-materials.md). Essas ferramentas fazem um trabalho maior, então não é uma comparação justa em capacidade; é apenas o que seu disco e seu cache de CI veem. E a versão que o pip me entregou (2.1.0) coincide com a release atual, então não existe asterisco de “você testou uma versão antiga” nos números abaixo.

Mão na massa: o que o extrator realmente devolveu

trafilatura boilerplate cleanup

Testei a ferramenta em fixtures criados para explorar tanto seu ponto forte quanto seu limite, com as saídas brutas salvas no repositório de benchmark. O teste de artigo foi o que me convenceu.

Peguei um fixture local de artigo e envolvi o conteúdo real com ruído: um pedido de login, um aviso de “Subscribe”, links de navegação e um rodapé de copyright — o boilerplate padrão que um scraper ingênuo traria junto com o corpo. O trafilatura devolveu o título mais 3 de 3 parágrafos do corpo, e todos os marcadores de boilerplate — Login, Subscribe, Copyright — sumiram da saída. Além do texto, ele capturou autor e data corretamente a partir dos metadados da página. O resultado completo, em .txt, .md e .json, está em results/local_article.json.

O mesmo HTML salvo foi exportado como texto simples, Markdown e JSON. O artigo não prova que os três formatos vieram de uma única chamada simultânea; eles são serializações alternativas do caminho de extração. Aqui, o JSON empacota texto e metadados extraídos, não registros repetidos definidos pelo usuário.

Aqui está a primeira execução completa em um só lugar, para você conferir as afirmações acima em vez de aceitar no escuro:

FixtureO que retornouTempoEvidência
Artigo local, cercado por nav / login / subscribe / copyrighttítulo + 3/3 parágrafos, zero vazamento de seções de boilerplate, autor Thunderbit Research Lab, data 2026-07-090.007 slocal_article.json
Catálogo de produtos local12 nomes de produtos e 12 preços em texto corrido, 0 linhas estruturadas, 478 caracteres0.064 slocal_catalog_extraction.txt
Página que retorna HTTP 500fetch_url retornou None, sem exceção30.012 slocal_failure_500.json
Página pública de produto do Books to Scrape1.324 caracteres de texto limpo, mais a versão em Markdown0.753 spublic_books_product.txt / .md

Cada linha foi lida de artifacts/raw/trafilatura-test-summary.json no pacote trafilatura — trafilatura 2.1.0, Python 3.14, macOS arm64, uma execução em uma máquina. Considere os tempos como observações, não como benchmark.

No fixture de 500, fetch_url retornou None depois de cerca de 30 segundos, enquanto endpoints locais próximos eram rápidos. A execução confirma a demora, não se ela veio de retry/backoff, de um timeout fixo ou de outro caminho interno. Este artigo não verificou um parâmetro de timeout por chamada suportado para fetch_url; o controle evidenciado é buscar com um cliente sob seu controle e passar o HTML resultante para o trafilatura.

trafilatura catalog text-only boundary

Os mesmos testes também expõem três limites.

Primeiro e mais importante: o trafilatura é um extrator de conteúdo, não um scraper estruturado. Rodei a ferramenta em um fixture de catálogo de produtos. Ela retornou todos os 12 nomes de produtos — como texto — e exatamente 0 linhas estruturadas (478 caracteres de texto plano, conforme results/local_catalog_extraction.txt). Os preços também vieram, de $18.00 até $51.00, cada um em sua própria linha abaixo do nome. Tudo o que você queria está na saída; nada disso é um campo. Se você precisa de [{name, price, rating}, …], esta é a ferramenta errada, e nenhuma configuração muda isso — é uma decisão de design, não um bug.

trafilatura no JavaScript render boundary

Segundo: ele não renderiza JavaScript. Ele consome HTML estático. Se você apontá-lo para uma página renderizada no cliente, receberá o que o servidor enviou antes de o JavaScript rodar — muitas vezes, nada útil. Combine-o com um renderizador se seus alvos forem pesados em JS; o trafilatura não faz essa metade do trabalho por você.

Terceiro, uma ressalva sobre a própria evidência: o primeiro teste público de extração usou um bloco de descrição de produto, não um artigo de notícias de verdade, porque o sandbox público não tinha páginas de notícia. O resultado de limpeza de artigo acima vem de um fixture local controlado. Eu confio nele — a remoção do boilerplate é inequívoca —, mas não quis fantasiar uma página de produto como prova de extração em nível de redação, então o pacote registrou isso como uma lacuna em aberto. Uma execução de acompanhamento em 2026-07-14 fechou essa lacuna, e os resultados estão na próxima seção.

Checagem de boilerplate em páginas reais

trafilatura boilerplate labels removed

Duas páginas reais foram capturadas uma vez, salvas como fixtures offline com hashes SHA-256 e executadas novamente sem acesso à rede. Nenhum tempo nem ground truth anotado foi registrado. Esta é uma checagem de boilerplate em páginas reais, não uma pontuação de fidelidade.

Fixture de artigo realHTML brutoCorpo extraídoCorpo/brutoMarcadores de interface removidostítulodatahostnameautorsitename
Wikipedia, "Web scraping"230.049 bytes26.673 bytes0.1164 de 4sim2005-09-17wikipedia.orgnullnull
Wikinews, "7th Heaven" (arquivado)79.716 bytes2.200 bytes0.0285 de 5sim2005-11-29wikinews.orgnullnull

Ambas as linhas vêm de artifacts/results/trafilatura-fidelity-summary.json. Os marcadores verificados foram “Jump to content”, “Privacy policy”, “Powered by MediaWiki”, “This page was last edited” e também “free news source” na página do Wikinews — todos removidos, nenhum vazou, nas duas páginas.

A razão corpo/bruto mede redução, não precisão; conteúdo omitido do artigo não foi pontuado. author e sitename ficaram como null nesses dois templates MediaWiki, enquanto o fixture local controlado forneceu autor. Isso é uma falha observada especificamente nesse template MediaWiki, não uma prova de confiabilidade geral para bylines. As datas extraídas são reportadas como retornadas e não foram verificadas contra ground truth.

Dois extratores, os mesmos bytes de HTML, um script de pontuação

System diagram: Two extractors, the same HTML bytes, one scoring script

Há exatamente uma comparação no mesmo ambiente de teste para o trafilatura nesta base de pesquisa, e o próprio pacote do trafilatura não a construiu. O pacote mozilla-readability fez isso, como braço de controle: 22 fixtures anotados manualmente, em que cada bloco de texto recebe a tag ARTICLE ou BOILERPLATE e cada palavra carrega um token sentinela único, de modo que uma palavra extraída possa ser mapeada de volta a exatamente um bloco anotado. As duas ferramentas receberam bytes HTML idênticos. O Readability rodou sob jsdom 29.1.1 no Node v22.22.3; o trafilatura rodou seu próprio parser.

Métrica (micro-média, conjunto de fidelidade de conteúdo)trafilatura 2.1.0@mozilla/readability 0.6.0Evidência
Unidades de artigo recuperadas40 de 4040 de 40comparison.json
Unidades de boilerplate vazadas1 de 175 de 17comparison.json
Tokens de boilerplate contaminando a saída341comparison.json
Precisão de token0.9390.902comparison.json
F1 de token0.9690.948comparison.json
Recall de não-prosa, fixture f6_nonprose7 de 88 de 8comparison.json
F1 do artigo muito curto, f3_short_1200.5710.800comparison.json

Fonte: tools/mozilla-readability/artifacts/raw/comparison.json nesta base de pesquisa — 11 fixtures no conjunto de fidelidade de conteúdo, 40 unidades de artigo e 17 unidades de boilerplate. São fixtures sintéticos, deliberadamente inclinados para casos adversariais, então leia isso como mecanismo, não como ranking de corpus real.

Nenhuma ferramenta limpa tudo, e a divisão é justamente a parte interessante. O trafilatura mantém a sujeira fora — um bloco vazado contra cinco do Readability, três tokens contaminantes contra 41. Essa é a metade da “limpeza do texto do artigo” ligada à precisão, e é essa metade que decide se o seu contexto de LLM se enche de links de barra lateral. Mas o Readability recupera conteúdo que o trafilatura descarta: no fixture de não-prosa, o trafilatura eliminou um <figcaption> que o Readability preservou, e em um artigo muito curto marcou 0.571 contra 0.800 do Readability. Limpeza agressiva é uma troca, não um ganho grátis. Se o seu corpus está cheio de textos curtos, legendas e páginas pesadas em tabelas, essa troca joga contra você.

Como transformar a comparação em um teste de seleção

Comece definindo qual erro custa mais caro para o seu pipeline. Se elementos de interface consomem tokens a jusante ou poluem resultados de busca, vazamento de unidades de boilerplate e contagem de tokens contaminantes merecem mais peso. Se perder uma legenda, um post curto ou um bloco de não-prosa for inaceitável, o recall do conteúdo por formato da página deve receber mais peso. O conjunto compartilhado de fixtures torna essa troca visível, mas não escolhe os pesos para um arquivo de redação, corpus de documentação ou pipeline de recuperação.

O contexto mais amplo do stress test está na comparação de memória e HTML malformado entre dez bibliotecas.

Monte o comparativo com HTML salvo, e não com URLs ao vivo, para que os dois extratores recebam bytes idênticos. Inclua artigos longos comuns, avisos curtos, peças ricas em legendas, documentos com tabelas ou código, e templates de cada publicador que você realmente ingere. Anote um pequeno número de unidades de conteúdo obrigatórias e blocos de interface conhecidos antes de rodar qualquer ferramenta. Depois, pontue separadamente saída vazia, recuperação das unidades obrigatórias, vazamento de unidades indesejadas e campos de metadados. Uma única nota agregada de “qualidade” pode esconder exatamente o modo de falha que importa na operação.

Também valide o contrato da saída a jusante. O JSON do trafilatura pode carregar conteúdo e metadados extraídos, mas uma serialização JSON não é o mesmo que um esquema de linhas tipadas. Para texto de artigo, verifique comprimento mínimo do corpo e marcadores obrigatórios em vez de aceitar qualquer saída não vazia. Para metadados, diferencie ausência de valores incorretos e mantenha a URL de origem mais a versão da extração para que falhas possam ser reproduzidas.

A etapa de busca deve ser testada separadamente. A observação do erro local de 30 segundos pertence a fetch_url, não à extração a partir de HTML já em memória, e o mecanismo interno não foi estabelecido. Se prazos, retries, autenticação ou política de proxy importam, use um cliente cujo comportamento você controla, registre os bytes finais da resposta e passe esses bytes para o extrator. Isso isola falhas de aquisição de falhas de seleção de conteúdo e torna as comparações reproduzíveis.

Por fim, meça as propriedades de implantação na plataforma de destino. A instalação com 17 pacotes em Python 3.14 não precisou de navegador separado, mas isso não determina throughput, crescimento de memória, disponibilidade de wheels em toda arquitetura ou comportamento com workers concorrentes. O artigo demonstra um mecanismo útil de precisão/retenção frente ao Readability; a adequação à produção ainda depende do corpus e de testes de runtime.

Como verificação externa que não vem deste conjunto de pesquisa, a página de avaliação do próprio trafilatura e o ScrapingHub article-extraction-benchmark público colocam a ferramenta à frente do readability-lxml em F1 de palavras em cerca de 181 páginas reais — na mesma direção da tabela acima. Uma ressalva que muitas análises que citam esse benchmark deixam de mencionar: o F1 amplamente divulgado do trafilatura (~0.945) está associado à versão antiga 0.5.1, não à 2.1.0 testada aqui.

Prós e contras

Prós:

  • Menor vazamento de boilerplate anotado que o Readability no conjunto compartilhado: 1 bloco de 17 contra 5.
  • Capturou autor e data corretamente no fixture local, e título/data/hostname nas duas páginas reais de artigo.
  • O mesmo HTML pode ser serializado como texto, Markdown ou JSON.
  • Instalação com 17 pacotes e sem runtime de navegador separado.
  • A falha é silenciosa: fetch_url retorna None em HTTP 500 em vez de lançar exceção.
  • A versão testada coincide com a mais recente (2.1.0) — sem desvio de versão.
  • Licença Apache-2.0 — permissiva e amigável para uso comercial.

Contras:

  • Não é um scraper estruturado: o teste de catálogo retornou 12 nomes e 12 preços como texto e 0 linhas tipadas. Sem esquema, sem campos.
  • Não renderiza JavaScript — apenas HTML estático; precisa de um renderizador separado para páginas client-side.
  • author e sitename vieram como null nas duas páginas MediaWiki reais, então extração de byline não é garantida.
  • Limpeza agressiva tem custo: ele descartou um <figcaption> que o Readability preservou e marcou 0.571 contra 0.800 do Readability em um artigo muito curto.
  • Aquele 500 silencioso levou 30.012 segundos para retornar None; use um fetcher sob seu controle quando o prazo importar.
  • O spider embutido de crawl/sitemap e os formatos de saída CSV/XML não foram exercitados nesta passagem, então não faço afirmações sobre eles.

Para quem é — e quem deve passar longe

O trafilatura é voltado para extração do conteúdo principal em artigos. É um candidato para construir corpus de texto, arquivos legíveis ou entradas de NLP a partir de HTML estático quando a limpeza heurística é aceitável. A comparação com os fixtures compartilhados mostra menor vazamento de boilerplate que o Readability, enquanto o Readability reteve mais casos curtos e não-prosa.

Passe longe se o que você realmente precisa é extração estruturada — linhas de produtos com preço, registros tipados, campos chave: valor — porque ele entrega texto, não tabelas (o teste de catálogo recuperou todos os 12 nomes e todos os 12 preços, e 0 linhas). Também não serve se seus alvos renderizam conteúdo no navegador e você não quer adicionar um renderizador separado, já que o trafilatura lê HTML estático e para por aí. E pense duas vezes se o seu corpus é majoritariamente composto de notas curtas, legendas de imagem e páginas pesadas em tabelas: nos fixtures anotados, é exatamente aí que a limpeza corta conteúdo real (F1 de 0.571 no artigo muito curto, e um <figcaption> descartado). Combine a ferramenta com a tarefa: texto integral de artigo, sim; JSON estruturado, páginas JS ou stubs de 100 palavras, procure outra opção.

Alternativas, incluindo onde o Thunderbit entra

trafilatura é uma biblioteca auto-hospedada com licença Apache-2.0 e sem custo por chamada cobrado por fornecedor; computação, banda, fetch, monitoramento e manutenção continuam sendo custo do operador. Ele lida com extração orientada a artigos a partir de HTML fornecido, mas não com execução de navegador nem com esquemas definidos pelo usuário para linhas repetidas.

Para os mesmos fixtures em todos os seis extratores, veja a comparação de extração entre seis bibliotecas.

Um serviço gerenciado pode colocar aquisição, renderização e modelagem de esquema atrás de uma fronteira de fornecedor. Nós construímos o Thunderbit, mas não o executamos contra estes fixtures, então este artigo não faz nenhuma comparação de qualidade, renderização, latência, anti-bot ou custo. A decisão é entre controle self-hosted de HTML para conteúdo e uma fronteira hospedada de aquisição e extração estruturada.

Reviews relacionados a benchmarks: a comparação completa de scrapers open source, a análise do Crawl4AI com navegador e saída Markdown e a análise do Firecrawl com Markdown auto-hospedado.

Experimente o Thunderbit para extração de dados da web

Veredito

Considere o trafilatura quando a tarefa for extração orientada a artigos a partir de HTML estático e sua prioridade for rejeitar boilerplate anotado. Nos fixtures compartilhados, ele vazou uma unidade de boilerplate anotada contra cinco do Readability. Essa vantagem veio com menor retenção nos fixtures muito curtos e não-prosa, então o formato do corpus deve decidir a escolha.

Ele não executa JavaScript nem emite linhas repetidas definidas pelo usuário. Nas duas páginas MediaWiki, author e sitename ficaram null, uma observação limitada ao template testado. O Readability preservou a legenda que o trafilatura descartou e teve pontuação superior no fixture rotulado f3_short_120; a evidência visível sustenta “F1 mais baixo no fixture muito curto”, não uma contagem de caracteres nem a afirmação de que a saída tenha sido corrompida.

Experimente o Thunderbit para extração de dados da web Get Started Free

Perguntas frequentes

Que tipo de estrutura o trafilatura devolve? Ele pode serializar conteúdo e metadados extraídos em JSON, Markdown, texto, HTML, XML ou CSV. Isso é uma serialização estruturada, mas não um esquema de linhas repetidas definido pelo usuário, como nome do produto, preço e avaliação. O fixture de catálogo devolveu valores como conteúdo plano, não como linhas tipadas.

O trafilatura consegue extrair um catálogo de produtos em linhas estruturadas? Não. Ele é um extrator de conteúdo, não um scraper estruturado. Em um fixture de catálogo, ele retornou todos os 12 nomes de produtos como texto corrido e 0 linhas estruturadas — os nomes estão na saída, mas não como campos. Se você precisa de registros tipados como nome/preço/avaliação, use um parser baseado em seletores ou uma API de extração guiada por esquema.

O trafilatura renderiza JavaScript? Não. Ele consome apenas HTML estático. Se você apontá-lo para uma página renderizada no cliente, receberá o que o servidor enviou antes de o JavaScript rodar — muitas vezes, não o conteúdo que você quer. Combine-o com um renderizador separado se os seus alvos forem pesados em JS.

O trafilatura é difícil de instalar? No virtualenv testado com Python 3.14, a instalação puxou 17 pacotes e não exigiu runtime de navegador separado. O maior wheel registrado foi o lxml, com 8,6 MB. Separadamente, uma chamada local de 500 levou 30.012 segundos para retornar None; use um cliente HTTP sob seu controle se você precisar de prazo verificado.

O trafilatura é gratuito para uso comercial? Ele é licenciado sob Apache-2.0, o que é permissivo e amigável para uso comercial. Como sempre, confirme a licença atual no repositório antes de construir em cima dele.

Ke
Ke
CTO na Thunderbit | Cientista de Dados Sênior e Especialista em ML Com quase uma década de experiência em machine learning e data science, Ke Shen é ex-aluno da Columbia University e foi Cientista de Dados Sênior na Walmart Labs. Com profunda experiência, reconhecida pelos pares, em Python, R, Java e Estatística, ele compartilha insights testados em batalha sobre como levar algoritmos complexos de IA da teoria à arquitetura pronta para produção.
Sumário
Thunderbit · Agente de dados web com IA

Extraia dados de qualquer página em 1 clique

Aprovado por mais de 250.000 usuários
plano gratuito disponível
Da página web para a planilha
Descreva o que você precisa — o Agente de IA da Thunderbit extrai e exporta para Excel, Google Sheets, Airtable ou Notion. Comece grátis.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week