Formatos e fontes de dados 5 min de leitura

Parsing de documentos: formatos, bibliotecas e abordagens

Panorama do parsing de documentos: PDF, Word, Excel, apresentações e digitalizações, com as bibliotecas e as abordagens que funcionam para cada formato.

EW
Equipe Web-Scraping.biz
Coleta de dados para as demandas do negócio
Publicado: 28 fevereiro 2025

O parsing de documentos consiste em extrair dados estruturados de arquivos de diferentes formatos e levá-los a uma forma prática para o processamento posterior: carregá-los em um banco de dados, despejá-los em uma planilha, passá-los para a análise ou para outro sistema. Na prática, a tarefa quase nunca se limita a um único formato: a lista de preços chega em Excel, a exportação do CRM em CSV, o contrato em PDF, os dados de um serviço externo em JSON ou XML, e o mapa do site que é preciso percorrer antes de coletar os dados, em formato sitemap.

Este artigo é um panorama geral. Repassamos a lógica de trabalho com cada tipo de arquivo, mostramos exemplos mínimos em várias linguagens e apontamos os materiais especializados em que cada formato é analisado em detalhe. Se você precisa de uma solução sob medida em vez de pesquisar por conta própria, oferecemos serviços de extração e processamento de dados de ponta a ponta.

Em que consiste o parsing de qualquer documento

Independentemente do formato, o processo tem quase sempre três passos. Primeiro vem a leitura: obter os bytes do arquivo de uma pasta local, por URL ou de um fluxo. Depois, a análise da estrutura: converter o conteúdo «bruto» em objetos da linguagem de programação: uma árvore de nós, uma lista de linhas, uma tabela. E, por fim, a extração e normalização: selecionar os campos necessários, limpar o lixo, ajustar os tipos (datas, números, moedas) e gravar o resultado.

A dificuldade se desloca entre esses passos conforme o formato. Nos dados estritamente estruturados, como JSON ou XML, o trabalho pesado já está feito: existe uma gramática formal e o parser vai construir a árvore de forma garantida. Nos formatos pouco estruturados, como o PDF, os logs ou os arquivos de texto arbitrários, a maior parte do esforço recai justamente no terceiro passo: os dados precisam ser «garimpados» com heurísticas e expressões regulares.

Formatos de dados estruturados

JSON

JSON é o formato de intercâmbio de dados mais difundido entre serviços e a principal resposta da maioria das APIs. Ele se projeta diretamente sobre as estruturas da linguagem: um objeto vira um dicionário (ou array associativo) e um array vira uma lista. Por isso o parsing se reduz a uma chamada da biblioteca padrão, e o trabalho de verdade começa depois, ao percorrer as estruturas aninhadas. A análise detalhada, com o tratamento do aninhamento, a leitura em fluxo de arquivos grandes e os erros típicos, está no artigo sobre o parsing de JSON.

python
import json

with open("data.json", encoding="utf-8") as f:
    data = json.load(f)

print(data["items"][0]["name"])

XML

XML se organiza como uma árvore de nós com tags, atributos e texto. É mais estrito e verboso que JSON, mas sobre ele foi construída uma infinidade de padrões setoriais: exportações de marketplaces, formatos bancários, intercâmbio industrial de dados. Para analisá-lo, usa-se ou a abordagem em fluxo (quando o arquivo é grande), ou a construção da árvore em memória com navegação via XPath. Os detalhes, as bibliotecas e os exemplos estão no material sobre o parsing de XML.

RSS e Atom

RSS é um caso particular de XML com um esquema fixo para feeds de notícias, blogs e podcasts. Tecnicamente, pode ser analisado com qualquer parser XML, mas na prática as bibliotecas especializadas são mais convenientes, pois devolvem diretamente a lista de entradas com títulos, datas e links. Mais detalhes no artigo sobre o parsing de RSS.

Sitemap (mapa do site)

O sitemap é outro formato XML: ele descreve a lista de URLs de um site para os buscadores e os rastreadores (crawlers). Antes de coletar dados de um site grande, o mapa quase sempre é percorrido em primeiro lugar: ele fornece uma lista pronta de páginas, às vezes com datas de atualização e prioridades, e evita o rastreamento às cegas dos links. Como ler mapas normais e aninhados (sitemap index), levar em conta o lastmod e trabalhar com as versões gzip, no artigo sobre o parsing de sitemaps.

Formatos tabulares

CSV

CSV é um formato de texto simples: «linhas e colunas separadas por vírgulas (ou outro caractere)». Apesar da simplicidade aparente, é aqui que surgem mais armadilhas práticas: separadores diferentes, aspas dentro dos valores, quebras de linha nas células, codificações e BOM. Por isso, uma análise caseira «com split por vírgulas» é quase sempre um erro: é preciso um leitor de CSV completo. O apanhado dessas armadilhas está no artigo sobre o parsing de CSV.

python
import csv

with open("prices.csv", encoding="utf-8", newline="") as f:
    for row in csv.DictReader(f):
        print(row["sku"], row["price"])

Excel (XLSX, XLS)

Excel já não é texto, e sim um formato binário (ou, no caso do XLSX, empacotado em ZIP) com planilhas, fórmulas, formatos de célula e áreas mescladas. Aqui não basta ler o arquivo como linhas: são necessárias bibliotecas que entendam a estrutura interna da pasta de trabalho. Com frequência, vale converter primeiro a lista de preços ou o relatório original para CSV e processá-lo depois de maneira uniforme. Como ler planilhas, células mescladas e valores de fórmulas, no material sobre o parsing de Excel.

Formatos pouco estruturados

PDF

PDF é um formato para impressão e visualização, não para armazenar dados, e por isso é o mais difícil na hora de extrair informação de forma confiável. O texto de um PDF pode ser «real» (selecionável) ou uma imagem que exige OCR; as tabelas não são gravadas como tabelas, e sim como um conjunto de linhas e blocos de texto com coordenadas. Quais bibliotecas extraem texto, quais extraem tabelas e quando não resta alternativa senão reconhecer imagens — tudo isso está no artigo sobre o parsing de PDF.

HTML

HTML se parece estruturalmente com XML, mas na prática quase sempre está «sujo»: tags sem fechar, marcação sobrando, conteúdo dinâmico. É o formato principal na coleta de dados de sites: extração de texto, links, preços e contatos. O apanhado dos parsers, dos seletores CSS e do trabalho com links, no artigo sobre o parsing de HTML.

TXT e logs

Os arquivos de texto arbitrários (.txt) e os logs de servidores não têm esquema comum nenhum: o formato é definido por quem criou o arquivo. Aqui as ferramentas principais são a leitura linha a linha e as expressões regulares. Os logs são um caso tão particular e importante que dedicamos a eles um artigo à parte; a abordagem geral da análise de texto está descrita no material sobre o parsing de TXT.

Que linguagem e stack escolher

Não existe uma escolha «correta» rígida, mas existe uma prática consolidada. Python é o padrão de facto para o parsing: bibliotecas ricas para todos os formatos (pandas, lxml, openpyxl, pdfplumber) e um mínimo de código. JavaScript/Node.js é prático quando o parsing está integrado a um projeto web ou é preciso renderizar conteúdo dinâmico no navegador. PHP é escolhido com frequência se os dados vão parar diretamente em um site construído sobre esse stack. Go é usado pela velocidade e pelo processamento em paralelo de grandes volumes. Em cada artigo especializado incluímos exemplos em várias linguagens para que você possa adotar a mais próxima do seu projeto.

Todos esses stacks têm algo em comum: o formato dita a biblioteca, e não o contrário. Por isso, comece determinando com exatidão o formato dos arquivos de origem e passe depois ao artigo correspondente: JSON, XML, RSS, sitemap, CSV, Excel, PDF, HTML, TXT ou logs.