Dados da web se tornaram material de pesquisa comum. Cientistas sociais estudam discurso em plataformas, economistas acompanham preços online, cientistas da computação constroem corpora, e pesquisadores de saúde pública acompanham desinformação. Grande parte disso é coletada com scrapers, e grande parte compartilha as mesmas fragilidades: ninguém fora da equipe consegue reproduzir a coleta, a revisão ética foi escrita para pesquisas de opinião, e o dataset é citado como “dados coletados pelos autores” ou nem sequer citado.
Nada disso é inevitável. Algumas práticas, a maioria delas baratas, tornam dados obtidos por scraping reprodutíveis, revisáveis e citáveis. Este guia aborda como projetar uma coleta que resista à revisão por pares, o que um comitê de ética precisa ver, como empacotar e citar o dataset, e um pequeno script testado que produz os arquivos de citação e manifesto.
Principais conclusões
- A web muda e difere conforme o visualizador, portanto um dataset obtido por scraping não pode ser reproduzido ao se executar novamente o scraper. Reprodutibilidade significa registrar exatamente o que foi coletado, quando, de onde e como, e preservar isso.
- Escreva o protocolo de coleta antes de coletar, e trate mudanças nele como emendas, assim como faria para qualquer outro método.
- A revisão ética para dados da web depende de expectativas, dano e identificabilidade, não apenas de os dados serem públicos ou não. Traga um plano de gestão de dados, não apenas uma renúncia de consentimento.
- Empacote o dataset com um manifesto de hashes de arquivos e contexto de coleta, uma licença e um arquivo CITATION.cff, e então deposite-o em um local que forneça um identificador persistente.
- Cite o dataset como um produto de pesquisa por si só, com uma versão e um identificador, ao lado do artigo.
Por que dados obtidos por scraping são difíceis de reproduzir
Executar novamente o mesmo código um ano depois não produz os mesmos dados. Páginas mudam, desaparecem e se movem. Muitos sites mostram conteúdo diferente por país, idioma, dispositivo ou estado de login. Plataformas mudam sua marcação e suas regras de acesso. E a coleta em si é lossy: bloqueios, timeouts e limites de taxa descartam registros de forma desigual, muitas vezes de maneiras que se correlacionam exatamente com as coisas que estão sendo estudadas.
Portanto, a reprodutibilidade de dados da web se apoia em três coisas em vez de na recoleta:
- Documentação do método com detalhes suficientes para que alguém possa tentar a mesma coleta e entender por que seu resultado difere.
- Preservação do que foi realmente coletado, idealmente as respostas brutas, além dos dados extraídos.
- Prestação de contas sobre o que não foi coletado: falhas, exclusões e filtragem, com contagens.
Projete a coleta como um instrumento
Trate o scraper como um instrumento de medição e escreva seu protocolo antes de a coleta começar:
| Elemento do protocolo | O que registrar |
|---|---|
| População e amostragem | Quais são as fontes, como foram escolhidas, e o que está dentro e fora do escopo |
| Janela de coleta | Datas e horários de início e fim em UTC, e o cronograma para coletas repetidas |
| Ponto de vantagem | O país, tipo de rede, idioma e perfil de dispositivo que o coletor apresentou, já que muitos sites variam conforme esses fatores |
| Ferramental | Repositório de código e commit, versões de bibliotecas, versão do navegador, se um foi usado |
| Regras de acesso | Como o robots.txt, os termos de serviço e os limites de taxa foram tratados, e o ritmo das requisições |
| Tratamento de falhas | Novas tentativas, o que conta como um registro com falha, e como as falhas são registradas |
| Processamento | Etapas de extração, limpeza, deduplicação e filtragem, cada uma com contagens antes e depois |
Dois desses elementos faltam rotineiramente em artigos. O ponto de vantagem importa porque a mesma URL pode retornar conteúdo diferente para visitantes diferentes, um problema que argumentamos dever ser registrado como padrão em a defesa de um padrão de ponto de vantagem. E as contagens de falhas importam porque um dataset com 8% de seus registros faltando só é interpretável se os leitores souberem quais são esses 8%.
Quando o estudo permitir, mantenha as respostas brutas além dos dados extraídos. Armazená-las no formato padrão WARC, conforme descrito em mantendo a resposta bruta, permite que você e pesquisadores posteriores reextraiam exatamente do que foi coletado quando se descobre que o parser estava errado.
Revisão ética
Muitos processos institucionais de ética foram projetados em torno do consentimento de participantes, e dados da web não se encaixam perfeitamente. Pesquisadores frequentemente argumentam que dados públicos não precisam de revisão; comitês frequentemente respondem com exigências projetadas para entrevistas. Uma conversa melhor começa pelas perguntas que realmente importam. As diretrizes de ética da Association of Internet Researchers, aprovadas em sua terceira versão em 2019, enquadram a ética da pesquisa na internet em torno do contexto em que os dados foram compartilhados e do potencial de dano ao longo de todo o ciclo de vida da pesquisa, em vez de em torno de um rótulo público ou privado.
Perguntas que uma solicitação de ética para dados da web deve responder:
- De quem são os dados, e o que essas pessoas esperavam? A lista de preços de uma empresa, as declarações públicas de um político e a postagem de um adolescente em um fórum são todas “públicas”, com expectativas muito diferentes.
- As pessoas podem ser identificadas, direta ou por combinação? Citações podem ser rastreadas de volta aos seus autores; agregar fontes pode identificar pessoas que nenhuma fonte isolada identificaria.
- Que dano poderia seguir, e para quem? Considere exposição, assédio e discriminação, especialmente para grupos vulneráveis ou temas sensíveis.
- Como os dados serão minimizados e protegidos? O que não é coletado, como os identificadores são pseudonimizados, quem tem acesso, onde são armazenados, e quando são excluídos.
- O que será publicado? Agregados, citações parafraseadas, ou registros brutos; e se um dataset compartilhado precisa de controles de acesso.
Termos de serviço e lei são questões separadas da ética, e ambas precisam de uma resposta. Fiesler, Beard e Keegan examinaram as provisões de coleta de dados nos termos de serviço de mais de cem sites de mídia social, em um estudo apresentado na ICWSM em 2020, e argumentaram que os termos de serviço por si só são uma base fraca para decisões éticas em qualquer direção. No lado legal, usos de pesquisa frequentemente têm provisões específicas; a lei de direitos autorais da UE, por exemplo, inclui uma exceção para mineração de texto e dados por organizações de pesquisa, e a lei de proteção de dados se aplica a dados pessoais independentemente de serem públicos ou não. Nossas visões gerais sobre se web scraping é legal e GDPR e coleta de dados são um ponto de partida; os responsáveis jurídicos e de proteção de dados da sua instituição são a autoridade para seu projeto.
O robots.txt merece uma frase em todo protocolo. Não é lei, mas é a declaração mais clara e legível por máquina do que um site deseja, e respeitá-lo é fácil de defender; robots.txt, opt-outs de IA e sinais de reserva cobre o que esses sinais significam.
Empacote o dataset
Um dataset que pode ser citado e reutilizado precisa de mais do que os arquivos de dados:
- Um manifesto listando todo arquivo com seu tamanho e um hash criptográfico, mais o contexto de coleta do protocolo. Hashes permitem que qualquer pessoa confirme que tem exatamente os arquivos que o artigo usou.
- Um README descrevendo os campos, o método, lacunas conhecidas e como usar os dados de forma responsável.
- Uma licença para o que você tem permissão de compartilhar, e uma declaração clara do que você não pôde compartilhar e por quê.
- Um arquivo CITATION.cff, o Citation File Format em texto simples que GitHub, Zenodo e gerenciadores de referência leem, para que qualquer pessoa possa citar o dataset corretamente com um clique.
A função abaixo escreve o manifesto e o CITATION.cff a partir de uma pasta de arquivos de dados e uma descrição da coleta:
import hashlib
import json
from datetime import date
from pathlib import Path
def sha256(path):
digest = hashlib.sha256()
with open(path, "rb") as f:
for block in iter(lambda: f.read(1 << 20), b""):
digest.update(block)
return digest.hexdigest()
def write_dataset_package(folder, title, authors, collection, version="1.0.0"):
"""Write a manifest (what was collected, how, and file hashes) and a CITATION.cff for a scraped dataset."""
folder = Path(folder)
files = sorted(p for p in folder.rglob("*") if p.is_file() and p.name not in ("MANIFEST.json", "CITATION.cff"))
manifest = {
"title": title,
"version": version,
"collection": collection, # sources, window, vantage point, tool and code version, robots policy
"files": [{"path": str(p.relative_to(folder)), "bytes": p.stat().st_size, "sha256": sha256(p)} for p in files],
}
(folder / "MANIFEST.json").write_text(json.dumps(manifest, indent=2) + "\n", encoding="utf-8")
lines = [
"cff-version: 1.2.0",
'message: "If you use this dataset, please cite it as below."',
"type: dataset",
f"title: {json.dumps(title)}",
f"version: {json.dumps(version)}",
f"date-released: {date.today().isoformat()}",
"authors:",
]
for person in authors:
lines.append(f" - family-names: {json.dumps(person['family'])}")
lines.append(f" given-names: {json.dumps(person['given'])}")
if person.get("orcid"):
lines.append(f" orcid: {json.dumps(person['orcid'])}")
abstract = (f"Collected {collection['window']} from {', '.join(collection['sources'])}. "
"See MANIFEST.json for method and file hashes.")
lines.append(f"abstract: {json.dumps(abstract)}") # JSON strings are valid YAML, so quotes cannot break the file
(folder / "CITATION.cff").write_text("\n".join(lines) + "\n", encoding="utf-8")
return manifest
Usada em um pequeno dataset de exemplo:
from package import write_dataset_package
manifest = write_dataset_package(
"dataset",
title="Robots.txt rules for AI crawlers on the top 10,000 domains",
authors=[{"family": "Example", "given": "Researcher", "orcid": "https://orcid.org/0000-0002-1825-0097"}],
collection={
"sources": ["robots.txt files of the Tranco top 10,000 domains"],
"window": "on 6 October 2026",
"vantage_point": "one network in Romania",
"tool": "survey.py at commit 3f2a9c1",
"robots_policy": "only robots.txt itself was requested",
},
)
print(len(manifest["files"]), "files listed")
O ORCID mostrado é o próprio identificador de exemplo publicado pela ORCID; use o seu. Validamos o arquivo gerado com cffconvert, a ferramenta de referência do formato, que reportou “Citation metadata are valid according to schema version 1.2.0”, e confirmamos que ele permanece válido quando títulos e nomes contêm aspas e apóstrofos, o que templates ingênuos quebram. A saída em estilo APA da ferramenta para o exemplo diz: “Example R. (2026). Robots.txt rules for AI crawlers on the top 10,000 domains (version 1.0.0).”
Deposite e cite
Um dataset em uma pasta de laboratório ou em um repositório pessoal do GitHub pode desaparecer. Deposite-o em um repositório que emita um identificador persistente:
- Repositórios gerais como o Zenodo, operado pelo CERN, emitem um DOI para cada upload, sem custo, com um limite padrão de 50 GB por registro.
- Repositórios institucionais e temáticos podem ser exigidos por seu financiador ou oferecer melhor descoberta na sua área.
- Acesso restrito é uma opção quando os dados não podem ser totalmente públicos: deposite o manifesto e a documentação abertamente, e os dados em si sob acesso controlado.
Os princípios FAIR, publicados na Scientific Data em 2016, resumem o que o depósito deve alcançar: os dados devem ser localizáveis, acessíveis, interoperáveis e reutilizáveis, por pessoas e por máquinas.
Então cite o dataset no artigo como uma referência própria, com autores, ano, título, versão, repositório e identificador, não apenas como uma frase na seção de métodos. Cite a versão exata que você analisou, e publique uma nova versão, com um novo identificador, quando os dados mudarem.
Uma lista de verificação
- Protocolo escrito antes da coleta, com amostragem, janela, ponto de vantagem, ferramental, regras de acesso e tratamento de falhas.
- Solicitação de ética cobrindo expectativas, identificabilidade, dano, minimização e publicação.
- Respostas brutas preservadas quando o estudo permitir, e cada etapa de processamento contabilizada.
- Manifesto com hashes de arquivos e contexto de coleta, README, licença e CITATION.cff.
- Depósito com um identificador persistente, e uma citação de dataset versionada no artigo.
A mesma disciplina se aplica fora do meio acadêmico; construindo datasets de treinamento em larga escala cobre isso para corpora de aprendizado de máquina.
Conclusão
Dados obtidos por scraping podem ser material de pesquisa rigoroso, mas apenas se forem tratados como tal: coletados segundo um protocolo escrito, revisados quanto à ética de seu contexto em vez de seu rótulo público, preservados com detalhes suficientes para explicar o que foi visto, e publicados como um produto citável e versionado.
A maior parte disso é documentação e empacotamento, feitos uma vez no início e uma vez no fim. É a diferença entre um dataset que sustenta um artigo e um que sustenta uma área inteira.
Fontes e referências
- Association of Internet Researchers, Internet Research: Ethical Guidelines 3.0, 2019.
- Wilkinson et al., The FAIR Guiding Principles for scientific data management and stewardship, Scientific Data, 2016.
- Fiesler, Beard e Keegan, No Robots, Spiders, or Scrapers: Legal and Ethical Regulation of Data Collection Methods in Social Media Terms of Service, ICWSM 2020.
- Citation File Format, versão 1.2.0, e o validador cffconvert.
- Zenodo, operado pelo CERN.
- Código testado pela Shifter em 6 de outubro de 2026.