Web scraping responsável: robots.txt, ritmo de coleta e LGPD
Um roteiro para montar coletas automatizadas de dados públicos que respeitam o site, preservam a prova e cumprem a lei.
Em resumo
- O robots.txt é um pedido do administrador do site, não uma tranca, mas segui-lo demonstra boa-fé e reduz bloqueios.
- Comece com uma requisição a cada poucos segundos e uma conexão por vez; prefira API ou dados abertos quando existirem.
- Pela LGPD, dado de acesso público exige finalidade, boa-fé e respeito ao interesse público que justificou a publicação.
- Defina a finalidade por escrito e descarte, já na extração, dados pessoais que não servem a ela.
- Registre URL, horário em UTC, código HTTP e hash SHA-256 de cada página coletada.
Web scraping responsável é a coleta automatizada de páginas públicas feita com três cuidados ao mesmo tempo: respeitar as regras técnicas do site (o arquivo robots.txt e o ritmo de acesso), tratar dados pessoais dentro da LGPD e registrar cada etapa para que o resultado possa ser conferido depois. Na prática, a diferença entre um robô útil e um problema está menos no código e mais nas decisões tomadas antes de apertar o botão.
Este guia mostra o que é cada uma dessas camadas, que problema ela resolve e como aplicá-la em Python, com exemplos voltados a quem investiga em fontes abertas.
O que é web scraping e por que ele interessa ao OSINT?
Raspagem de dados (web scraping) é o uso de um programa para baixar páginas e extrair delas informações estruturadas: nomes de empresas em um diário oficial, valores de contratos em um portal de transparência, preços em uma loja on-line, títulos de notícias de um veículo regional.
Para quem faz OSINT, o ganho é escala e repetibilidade. Ler 30 edições de um diário oficial à mão leva dias; um script faz isso em minutos e repete a coleta toda semana do mesmo jeito. O exemplo clássico é o monitoramento de licitações: o robô baixa os avisos publicados, separa objeto, valor e órgão, e gera uma planilha que o analista cruza com outras bases.
O risco é proporcional ao ganho. Um robô mal configurado pode derrubar um site pequeno, coletar dados pessoais sem necessidade ou produzir uma base que ninguém consegue auditar. Por isso vale separar o assunto em três camadas.
Camada técnica: o que o robots.txt diz e o que ele não diz
O que é o robots.txt?
É um arquivo de texto público, sempre na raiz do domínio (por exemplo, https://exemplo.gov.br/robots.txt), em que o responsável pelo site indica quais caminhos os robôs podem ou não visitar. O formato foi padronizado pela IETF na RFC 9309, de 2022.
Dois pontos da norma importam para o investigador. O primeiro: o próprio texto afirma que "these rules are not a form of access authorization", ou seja, o arquivo é um pedido de cortesia, não uma tranca. Ele não autoriza nem proíbe juridicamente nada por si só. O segundo: a RFC orienta que o robô não use uma cópia guardada do arquivo por mais de 24 horas, salvo se ele estiver inacessível, e que trate um erro de servidor (códigos 5xx) como bloqueio total até o arquivo voltar.
Por que respeitar o robots.txt mesmo sem obrigação legal direta?
Porque ele é a manifestação mais clara da vontade do administrador do site. Ignorá-lo enfraquece a defesa da sua boa-fé se a coleta for questionada, aumenta a chance de bloqueio do seu IP e, em investigações formais, pode virar argumento contra a forma como a prova foi obtida. Respeitar o arquivo é barato e documentável.
Como ler o robots.txt em Python?
A biblioteca padrão já traz o módulo urllib.robotparser. Ele lê o arquivo, responde se um endereço pode ser acessado (can_fetch) e informa o intervalo pedido pelo site (crawl_delay), quando existir.
import time, hashlib, datetime, urllib.robotparser
import requests
UA = "PesquisaAcademica-OSINT/1.0 (contato: equipe@exemplo.org)"
BASE = "https://exemplo.gov.br"
rp = urllib.robotparser.RobotFileParser(BASE + "/robots.txt")
rp.read()
intervalo = rp.crawl_delay(UA) or 5 # segundos
def coletar(url):
if not rp.can_fetch(UA, url):
print("Bloqueado pelo robots.txt:", url)
return None
r = requests.get(url, headers={"User-Agent": UA}, timeout=30)
registro = {
"url": url,
"status": r.status_code,
"coletado_em": datetime.datetime.now(datetime.timezone.utc).isoformat(),
"sha256": hashlib.sha256(r.content).hexdigest(),
}
time.sleep(intervalo)
return r, registro
Repare em três escolhas: o User-Agent identifica quem coleta e oferece um contato; o intervalo entre requisições vem do próprio site (ou de um padrão conservador); e cada resposta gera um registro com horário em UTC e hash SHA-256 do conteúdo baixado.
Camada de ritmo: quanto é rápido demais?
Não existe número universal. Um portal federal com balanceamento de carga aguenta mais do que o site de uma câmara municipal hospedado em um servidor modesto. A regra prática é começar devagar (uma requisição a cada poucos segundos), uma conexão por vez, e aumentar só se o site responder bem.
Ferramentas maiores automatizam esse cuidado. O Scrapy, framework de raspagem em Python, tem a extensão AutoThrottle, que ajusta o intervalo conforme a latência medida em cada domínio e nunca desce abaixo do atraso mínimo configurado em DOWNLOAD_DELAY. Para quem coleta milhares de páginas, ativá-la é a forma mais simples de não sobrecarregar o servidor.
Outros cuidados de ritmo:
- Coletar fora do horário de pico do serviço, quando possível.
- Guardar o HTML bruto localmente e reprocessar a partir dele, em vez de baixar de novo a cada ajuste no código.
- Parar diante de respostas 429 (excesso de requisições) ou 503 e retomar mais tarde, com intervalo maior.
- Preferir a API oficial ou o arquivo de dados abertos quando eles existirem: é a mesma informação, com menos carga e mais estabilidade.
Camada jurídica: dado público não é dado livre
O que a LGPD diz sobre dados de acesso público?
A Lei 13.709/2018 não proíbe tratar dados pessoais disponíveis na internet, mas impõe condições. O art. 7º, § 3º, determina que o tratamento de dados pessoais cujo acesso é público "deve considerar a finalidade, a boa-fé e o interesse público" que justificaram a disponibilização. O § 4º dispensa o consentimento para dados tornados manifestamente públicos pelo titular, resguardados os direitos dele e os princípios da lei. E o § 7º admite tratamento posterior para novas finalidades, desde que haja propósito legítimo e específico.
Os princípios do art. 6º completam o quadro: finalidade (propósito legítimo e explícito), adequação (compatibilidade com o contexto) e necessidade (limitar o tratamento ao mínimo necessário). Traduzindo para a raspagem: colete só os campos de que precisa, para um propósito definido antes da coleta.
Como isso aparece em casos concretos?
Um exemplo recente vem de Santa Catarina. Em agosto de 2026, a 3ª Turma Recursal do TJSC manteve decisão que considerou irregular o uso de nome, endereço e telefone de consumidores por uma empresa de inteligência imobiliária. Segundo a notícia do tribunal, a empresa alegou usar fontes públicas e privadas e legítimo interesse, mas os documentos apresentados foram considerados genéricos demais para comprovar a origem e a base legal dos dados. O caso não trata de raspagem em si, mas ilustra o ponto central: quem trata o dado precisa conseguir demonstrar de onde ele veio e por que pode usá-lo.
No plano internacional, autoridades de proteção de dados de 16 jurisdições assinaram, entre 2023 e 2024, declarações conjuntas sobre raspagem. A mensagem principal é a mesma: informação pessoal publicamente acessível continua protegida pelas leis de privacidade, e raspagens em massa podem configurar incidente de segurança em vários países.
O que muda para quem investiga?
Três hábitos resolvem a maior parte do risco:
- Escreva a finalidade antes da primeira linha de código. Uma frase basta: "levantar contratos do município X com fornecedores de merenda entre 2023 e 2026".
- Minimize na origem. Se a pergunta é sobre empresas, não guarde CPF, telefone ou endereço de pessoas físicas que aparecem na página. Descartar no momento da extração é mais seguro do que limpar depois.
- Separe dado de pessoa jurídica e de pessoa física. CNPJ, razão social e valores de contrato têm tratamento bem diferente de dados de um servidor ou de um cidadão.
E a inteligência artificial nessa história?
Modelos de linguagem ajudam a transformar texto bruto em tabela: extrair partes de um contrato, classificar avisos por tema, agrupar nomes parecidos. Dois cuidados são indispensáveis. Primeiro, confira por amostragem o que o modelo extraiu, porque ele pode inventar campos ou trocar valores. Segundo, não envie dados pessoais coletados a serviços externos sem necessidade; para material sensível, prefira modelos executados localmente ou envie só os trechos sem identificação.
Na prática
- Antes de coletar, leia o robots.txt e os termos de uso do site e registre o que encontrou, com data.
- Identifique o robô com um User-Agent que diga quem coleta e como entrar em contato.
- Comece com uma requisição a cada poucos segundos e uma conexão por vez; aumente só se o site responder bem.
- Prefira API oficial ou arquivo de dados abertos quando existirem.
- Guarde para cada página a URL, o horário em UTC, o código de resposta e o hash SHA-256 do conteúdo.
- Defina a finalidade por escrito e descarte, já na extração, dados pessoais que não servem a ela.
Conclusão
Web scraping é uma das técnicas mais produtivas do OSINT, justamente porque transforma páginas dispersas em bases que podem ser cruzadas e auditadas. A coleta responsável se distingue da arriscada por decisões simples: respeitar o robots.txt e o ritmo do servidor, coletar só o necessário para uma finalidade definida e documentar cada passo. Um robô que segue essas regras produz dados melhores e uma investigação mais fácil de defender.
Referências
- IETF: RFC 9309, Robots Exclusion Protocol
- Python: urllib.robotparser, parser para robots.txt
- Scrapy: extensão AutoThrottle
- Câmara dos Deputados: Lei 13.709/2018 (LGPD), texto atualizado
- ANPD: guia sobre a hipótese legal do legítimo interesse
- TJSC: Turma Recursal considera ilegal tratamento de dados usados para prospecção imobiliária
- OAIC: declaração conjunta sobre raspagem de dados e privacidade (2023)
- PCPD Hong Kong: Concluding joint statement on data scraping (2024)
- EBU Spotlight: guia de raspagem de dados e coleta de evidências
Perguntas frequentes
Web scraping é crime no Brasil?
Não existe tipo penal específico para a raspagem de páginas públicas. O risco está na forma: contornar login, senha ou bloqueio técnico, sobrecarregar o servidor ou tratar dados pessoais sem base legal e finalidade. Coleta de conteúdo aberto, em ritmo moderado e com dados minimizados, é prática comum em pesquisa e jornalismo.
O robots.txt tem força de lei?
Não. A própria RFC 9309 diz que as regras do arquivo não são uma forma de autorização de acesso. Mesmo assim, segui-lo demonstra boa-fé, reduz bloqueios de IP e fortalece a defesa da coleta se ela for questionada. Vale também ler os termos de uso do site e registrar, com data, o que ambos diziam no momento da coleta.
Posso raspar dados pessoais que estão em sites públicos?
A LGPD permite em certas condições, mas exige finalidade legítima, boa-fé e respeito ao interesse público que justificou a publicação (art. 7º, § 3º). Na dúvida, colete apenas dados de empresas e documentos oficiais e descarte informações de pessoas físicas que não sejam necessárias.
Que registro devo guardar para usar a coleta como prova?
Para cada página: URL, data e hora em UTC, código de resposta HTTP, hash SHA-256 do conteúdo e, se possível, o HTML bruto e uma captura arquivada em serviço independente, como a Wayback Machine. Guarde também a versão do script usado, para que outra pessoa consiga repetir a coleta.
Referências
- IETF: RFC 9309, Robots Exclusion Protocol
- Python: urllib.robotparser, parser para robots.txt
- Scrapy: extensão AutoThrottle
- Câmara dos Deputados: Lei 13.709/2018 (LGPD), texto atualizado
- ANPD: guia sobre a hipótese legal do legítimo interesse
- TJSC: Turma Recursal considera ilegal tratamento de dados usados para prospecção imobiliária
- OAIC: declaração conjunta sobre raspagem de dados e privacidade (2023)
- PCPD Hong Kong: Concluding joint statement on data scraping (2024)
- EBU Spotlight: guia de raspagem de dados e coleta de evidências
