Como verificar links quebrados de redes sociais com Wayback Machine CDX
Atualizado em

Quando um post some ou uma URL antiga de rede social para de abrir, a primeira pergunta é se o Wayback Machine guardou algum snapshot. Os dados CDX ajudam nessa checagem porque funcionam como um índice do arquivo: URLs capturadas, timestamps, status codes, MIME types, digests e tamanho da resposta. Eles não provam o conteúdo da página sozinhos, mas ajudam a encontrar capturas candidatas, limpar dados, deduplicar, visualizar cobertura e validar snapshots antes de fazer afirmações.
| Etapa | O que fazer | Por que importa |
|---|---|---|
| 1. Coletar URLs-semente | Guardar URL original, fonte, data de coleta e tipo de alvo | Mantém a proveniência visível |
| 2. Normalizar variantes | Remover ruído de rastreamento sem esconder diferenças reais da plataforma | Evita falsos duplicados |
| 3. Consultar o CDX | Trazer timestamp, URL original, MIME type, status code, digest e tamanho | Cria o dataset bruto de arquivo |
| 4. Enriquecer linhas | Parsear timestamps, inferir plataforma e classificar perfis, posts e threads | Torna os dados analisáveis |
| 5. Deduplicar com cuidado | Comparar digest, URL e grupos de alvo | Evita exagerar a preservação |
| 6. Validar snapshots | Abrir https://web.archive.org/web/{timestamp}/{original_url} | Separa linhas indexadas de evidência |
| 7. Visualizar cobertura | Criar gráficos por plataforma, status, data e alvo | Revela lacunas e prioridades de revisão |
CDX é a camada de índice das capturas arquivadas. Pense nele como uma entrada de catálogo, não como a própria página arquivada.
Para fluxos relacionados, veja limpeza de dados com Pandas, Pandas to_datetime, Pandas Drop Duplicates e web scraping com Python.
Por que dados arquivados de redes sociais são bagunçados
URLs de redes sociais parecem estáveis, mas o comportamento das plataformas deixa a análise de arquivo cheia de ruído. Um post do Twitter/X pode aparecer em twitter.com, x.com ou mobile.twitter.com. Uma thread do Reddit pode incluir caminhos antigos, âncoras de comentário, parâmetros de query e shortlinks. URLs do Instagram variam entre perfil, post, reel e caminhos de mídia incorporada.
Essas variantes importam porque duas URLs equivalentes para uma pessoa podem aparecer como chaves CDX separadas. Uma consulta ampla demais pode coletar assets irrelevantes. Uma consulta estreita demais pode perder capturas em outro hostname.
Fontes comuns de ruído:
- Variantes de URL: hostnames, barras finais, fragmentos e parâmetros de rastreamento.
- Densidade de timestamps: muitas capturas podem representar respostas idênticas repetidas.
- Comportamento da plataforma: redirects, telas de login, intersticiais, app shells ou páginas pesadas em JavaScript.
- Confusão de evidência: uma linha CDX costuma ser confundida com prova de conteúdo.
O objetivo não é deixar dados arquivados de redes sociais perfeitos. O objetivo é tornar o fluxo auditável.
Matriz de disponibilidade de dados públicos
Use esta matriz para evitar conclusões fortes antes de começar a análise.
| Tipo de dado | Twitter/X | TikTok | ||
|---|---|---|---|---|
| Metadados públicos de perfil | CDX e snapshots parciais | JSON público e CDX | CDX e snapshots parciais | CDX e snapshots parciais |
| Texto público de post | Depende do snapshot | JSON público e snapshots | Depende do snapshot | Depende do snapshot |
| Mídia pública de post | Melhor esforço | Muitas vezes mais fácil que Instagram | Difícil e parcial | Difícil e parcial |
| Posts públicos excluídos | Só se capturados antes da exclusão | Só se capturados antes da exclusão | Raro | Raro |
| Contagens históricas de engajamento | Depende do snapshot | JSON recente ou depende do snapshot | Geralmente indisponível | Geralmente indisponível |
Dados de arquivo são mais fortes para histórico de páginas públicas. Eles não são exportação privada, histórico completo de uma conta nem prova de que registros ausentes nunca existiram.
O que a API CDX retorna
A API Wayback CDX retorna linhas do índice de arquivo para um padrão de URL. Uma consulta compacta fica assim:
curl "https://web.archive.org/cdx/search/cdx?url=twitter.com/*/status/*&output=json&fl=timestamp,original,mimetype,statuscode,digest,length&filter=statuscode:200&limit=100"Os campos principais são:
| Campo | Significado | Uso |
|---|---|---|
timestamp | Momento da captura em YYYYMMDDhhmmss | Criar linhas do tempo |
original | URL original capturada | Recuperar e normalizar alvos |
mimetype | MIME type da resposta arquivada | Separar HTML, imagens, JSON e assets |
statuscode | Status HTTP registrado pelo arquivo | Filtrar redirects, erros e respostas bloqueadas |
digest | Impressão digital do conteúdo | Encontrar capturas idênticas repetidas |
length | Tamanho da resposta | Marcar páginas de erro muito pequenas ou respostas incomuns |
collapse=digest pode reduzir duplicados, mas em fluxos de pesquisa costuma ser melhor manter as linhas brutas primeiro e deduplicar depois com regras explícitas.
Monte o dataset
Comece com URLs-semente explícitas:
label,platform,url
example_x_post,x,https://twitter.com/example/status/1234567890
example_reddit_thread,reddit,https://www.reddit.com/r/example/comments/abc123/example_thread/
example_instagram_profile,instagram,https://www.instagram.com/example/Adicione campos como source, collection_date, expected_platform, target_type e notes. Proveniencia faz parte do dataset, não de uma tarefa separada de memória.
Normalize de forma conservadora. Remova ruído óbvio de rastreamento, mas preserve caminhos que podem identificar um post, comentário ou item de mídia especifico:
from urllib.parse import parse_qsl, urlencode, urlparse, urlunparse
TRACKING_PREFIXES = ("utm_",)
TRACKING_KEYS = {"fbclid", "gclid", "igshid"}
def normalize_url(url: str) -> str:
parsed = urlparse(url.strip())
query = [
(key, value)
for key, value in parse_qsl(parsed.query, keep_blank_values=True)
if key not in TRACKING_KEYS
and not any(key.startswith(prefix) for prefix in TRACKING_PREFIXES)
]
path = parsed.path[:-1] if parsed.path != "/" and parsed.path.endswith("/") else parsed.path
return urlunparse(("https", parsed.netloc.lower(), path, "", urlencode(query), ""))Se duas URLs podem representar objetos diferentes, mantenha as duas e crie um campo derivado normalized_group em vez de forcar tudo para um único valor.
Limpe e enriqueça as linhas CDX
Depois de exportar CDX em JSON ou CSV, parseie o timestamp, converta campos numéricos, infira a plataforma e crie URLs de snapshot do Wayback:
from urllib.parse import urlparse
import pandas as pd
df = pd.read_csv("social_cdx_export.csv")
df["captured_at"] = pd.to_datetime(
df["timestamp"].astype(str),
format="%Y%m%d%H%M%S",
utc=True,
errors="coerce",
)
df["capture_month"] = df["captured_at"].dt.strftime("%Y-%m")
df["statuscode"] = pd.to_numeric(df["statuscode"], errors="coerce")
df["length"] = pd.to_numeric(df["length"], errors="coerce")
def platform_from_url(url: str) -> str:
host = urlparse(str(url)).netloc.lower()
if "twitter.com" in host or "x.com" in host:
return "x"
if "reddit.com" in host:
return "reddit"
if "instagram.com" in host:
return "instagram"
return "other"
df["platform"] = df["original"].apply(platform_from_url)
df["wayback_url"] = (
"https://web.archive.org/web/"
+ df["timestamp"].astype(str)
+ "/"
+ df["original"].astype(str)
)Em seguida, deduplique de acordo com a pergunta que você quer responder:
deduped = (
df.sort_values("captured_at")
.drop_duplicates(subset=["original", "digest"], keep="first")
.copy()
)
duplicate_ratio = 1 - (len(deduped) / len(df))Se você se importa com cada vez que o arquivo viu uma URL, mantenha mais linhas. Se você se importa com estados distintos de conteúdo, deduplique de forma mais agressiva.
Valide antes de afirmar
Uma linha CDX com statuscode=200 e uma pista, não uma conclusão. O snapshot pode ser o post original, mas também pode ser uma tela de login, destino de redirect, app shell, intersticial ou captura parcial.
Use três niveis de confianca:
| Nível | Significado | Use para |
|---|---|---|
| Indexado | O CDX retornou uma linha | Descoberta e fila de revisão |
| Recuperado | O snapshot do Wayback abre e retorna conteúdo significativo | Análise de candidatos |
| Validado | Um revisor confirmou que o conteúdo ou metadado necessário está visível | Trabalho sensível a evidência |
Para cada linha que sustenta uma conclusão, adicione campos de revisão:
| Coluna | Finalidade |
|---|---|
wayback_url | URL direta do snapshot |
validation_status | indexed, retrieved, valid_snapshot, login_wall, redirect_only, error ou unknown |
validation_notes | Motivo legível para o status |
Isso é especialmente importante no Instagram. Pesquisas sobre capturas do Instagram observaram que muitos mementos podem redirecionar para páginas de login ou não trazer imagens dos posts, então contagens brutas de captura podem enganar.
Visualize a cobertura
Depois que o dataset estiver limpo, a visualização ajuda a decidir se vale investir em mais revisão:
- linha do tempo de capturas por plataforma,
- distribuição de status code por plataforma,
- distribuição de MIME type,
- contagem de digests únicos por alvo,
- primeira e última data de captura por URL,
- taxa de duplicados por plataforma.
Para exploração em notebook, o PyGWalker pode inspecionar o dataframe de forma interativa:
import pygwalker as pyg
pyg.walk(deduped)Para uma tabela de resumo rápida:
summary = (
df.groupby("platform")
.agg(
total_captures=("original", "count"),
unique_urls=("original", "nunique"),
unique_digests=("digest", "nunique"),
first_capture=("captured_at", "min"),
last_capture=("captured_at", "max"),
)
.reset_index()
)
summary["duplicate_ratio"] = 1 - summary["unique_digests"] / summary["total_captures"]O Graphic Walker é útil para uma versão no navegador do mesmo fluxo: carregue o dataset limpo, arraste campos de timestamp e plataforma para uma linha do tempo e alterne entre resumos por status code, MIME type e digest.
O que dados CDX podem e não podem provar
Dados CDX podem ajudar a estabelecer que uma URL pública teve capturas arquivadas, quando essas capturas foram indexadas, qual status code e MIME type foram registrados e se capturas repetidas parecem compartilhar um digest.
Dados CDX não provam sozinhos que um post excluído existiu em uma forma específica, que uma captura de tela é autêntica, que a página arquivada renderizou igual para todos os usuários ou que todo asset, comentário, imagem ou embed foi preservado.
Use CDX para descoberta e estrutura. Use validação de snapshot para evidência.
Falhas comuns
| Falha | O que fazer |
|---|---|
Resposta 200 e uma tela de login | Rotule como login_wall, não como evidência valida |
| Capturas duplicadas demais | Compare digest antes de interpretar volume de capturas |
| Cadeias de redirect | Mantenha linhas apenas de redirect, mas revise o destino |
| Assets ausentes | Inspecione snapshots renderizados quando imagem ou video importa |
| Migração de hostname | Acompanhe twitter.com, x.com e hostnames mobile explicitamente |
Se você prefere um fluxo UI-first, o PeekVault (opens in a new tab) pode buscar registros públicos do Wayback para URLs de redes sociais e exportar linhas como CSV, JSON ou HTML. Trate qualquer exportação como dataset inicial que ainda precisa de validação.
Uso responsavel
Análise de arquivos pode tocar contextos sensíveis, especialmente quando conteúdo de redes sociais mudou, desapareceu ou virou disputa.
Use estes limites:
- Trabalhe com registros públicos de arquivo.
- Não sugira acesso a contas privadas ou conteúdo privado.
- Não trate ausência de registros arquivados como prova de que algo nunca existiu.
- Não trate uma linha CDX como prova de conteúdo sem abrir o snapshot.
- Mantenha proveniência e notas de validação.
- Respeite preocupações de remoção, privacidade e segurança.
Esses limites são éticos, mas também práticos. Um dataset que separa linhas brutas de índice de evidências validadas é mais fácil de revisar, reproduzir e contestar.
FAQ
O que são dados do Wayback Machine CDX?
Dados do Wayback Machine CDX são metadados do índice de arquivo. Eles listam URLs capturadas, timestamps, status codes, MIME types, digests e tamanhos. Ajudam a encontrar snapshots candidatos, mas não são o conteúdo da página arquivada em si.
Dados CDX provam que um post excluído de rede social existiu?
Não sozinhos. Dados CDX podem mostrar que uma URL pública teve registros arquivados, mas você ainda precisa inspecionar o snapshot real do Wayback e confirmar que o conteúdo relevante está visível e faz sentido.
Por que um status code 200 às vezes falha na análise de arquivo?
Um status 200 significa que o arquivo registrou uma resposta HTTP bem-sucedida, mas essa resposta ainda pode ser uma tela de login, app shell, página de redirect ou captura incompleta. Trate o status code como filtro, não como evidência final.
Como deduplicar capturas repetidas do Wayback?
Comece com original mais digest, para que respostas idênticas repetidas da mesma URL virem uma única linha. Para análises mais amplas, compare deduplicação por plataforma, tipo de alvo, URL normalizada e digest.
Guias relacionados
- Hub de Data Science
- Melhores datasets públicos para seus projetos
- Limpeza de dados com Pandas
- Pandas to_datetime
- Pandas Drop Duplicates
- Exportar um DataFrame para CSV
- Web scraping com Python
Referências
- Internet Archive: documentação da Wayback CDX Server API (opens in a new tab)
- Bragg e Weigle: Discovering the Traces of Disinformation on Instagram in the Internet Archive (opens in a new tab)
- Kanaries: documentação do PyGWalker (opens in a new tab)
- Kanaries: documentação do Graphic Walker (opens in a new tab)