wechat-article-fetch · Captura de artigos de contas públicas do WeChat
Fatos centrais (já testados na prática, executar diretamente)
- UA é a única barreira de entrada: use o User-Agent de navegador embutido nos scripts. Sem UA / curl / python-requests / MicroMessenger → resultam em 302
- Conteúdo principal fácil de obter: renderizado no servidor, em
<div id="js_content">, basta GET puro, sem necessidade de JS/Cookie/login - Imagens sem proteção contra hotlinking: URLs reais em
data-src - Camada de descoberta: artigos originais não indexados por mecanismos de busca; Sogou fornece links de redirecionamento criptografados; HTTP puro pode decompor a assinatura em URL direta (janela ≥ 1h, capturar rápido); ⚠️ cerca de 15~20 requisições seguidas em 30 minutos acionam CAPTCHA a nível de IP (requer humano, navegador também sem solução) → baixa frequência sequencial, pare ao acionar
Exemplo de UA (use ao escrever seus scripts): Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Uso (scripts no mesmo diretório, zero dependências, modo CLI e biblioteca, erros estruturados via WeChatError)
python wechat_fetch.py "<url>" [--format md|json|text] [--out FILE] # Capturar artigo
python wechat_discover.py "palavra-chave" [--format table|json] # Buscar metadados (decomposição da cadeia de redirecionamento conforme status do canal)
python batch_fetch.py urls.txt [--min-delay 3] [--max-delay 8] [--daily-limit 500] # Lote: limitar velocidade / retomada automática / parada no CAPTCHA
Status dos canais (testado em 2026-08, para evitar uso de caminhos mortos)
| Canal | Status |
|---|---|
| Página pública de artigo (captura direta) | ✅ Estável a longo prazo (núcleo desta skill) |
| Busca Sogou | ✅ Apenas metadados recentes (estado limpo); cadeia de redirecionamento em HTTP puro, extrair URL com assinatura (janela ≥ 1h, capturar rápido); ⚠️ ~15-20 requisições / 30 minutos aciona CAPTCHA de IP, requer humano |
| Página de coleção (álbum) | ⚠️ Anônimo pode navegar, apenas artigos na coleção |
| Lista de histórico da página inicial da conta pública | ❌ Anônimo barrado: "Por favor, abra o link no cliente WeChat"; getmsg apenas ~10 artigos recentes |
| Busca entre contas no backend da conta pública | ❌ Morto (WeChat desligou em 2026-07-30, todas as ferramentas do setor paralisadas) |
Conclusão: camada de captura estável; limite da camada de descoberta = recentes do Sogou + coleções (⚠️ limite dinâmico de frequência, baixa frequência); sem canal legítimo para histórico completo.
Fluxo de trabalho
- Link já disponível → GET (com UA de navegador) → extrair
#js_content→ saída. Em caso de falha, seguir tabela de diagnóstico, não repetir cegamente. - Apenas palavra-chave → obter metadados do Sogou; se precisar do conteúdo, usar HTTP puro para decompor a cadeia de redirecionamento via JS e extrair a URL com assinatura e voltar ao fluxo de captura (em caso de falha / acionamento de anti-raspagem, tentar navegador como fallback; ou buscar um espelho de republicação, mas informar o usuário sobre possível modificação). Histórico da página inicial e busca no backend não tentar (morto / barrado)
Análise (necessário apenas se for escrever regex manualmente; ao usar os scripts, pode pular)
Âncoras: var msg_title / nickname / ct + #js_content. ⚠️ msg_title/nickname possuem invólucros .html(false)/htmlDecode() – regex case apenas com a primeira string após o sinal de igual, caso contrário tudo ficará vazio; imagens usar data-src em vez de src.
Diagnóstico de falhas (não repetir cegamente)
| Fenômeno | Causa | Ação |
|---|---|---|
| 302 | UA inadequado | Trocar para UA de navegador |
| 200 + "Erro de parâmetro" | Link inválido | Parar, verificar link |
| 302 → antispider | Bloqueio do lado do Sogou (CAPTCHA nível IP, testado em 2026-08-13 requer humano) | Parar, não contornar; tentar novamente em baixa frequência ou aguardar recuperação (navegador também bloqueado) |
| 302 → appmsgcaptcha | Link anormal / acionamento de CAPTCHA | Parar, não contornar |
| 200 + "Esta página não existe" | UA julgado como bot | Trocar para UA de navegador |
| 200 + "Por favor, abra no cliente WeChat" | Página que requer login | Canal não disponível, usar Sogou / coleção |
| 200 + "Removido / violação" | Artigo foi processado | Pular, registrar motivo |
Restrições rígidas (violar = parar)
- Não tocar em estado de login: quaisquer cookies ou estado de login do WeChat pessoal / backend de conta pública são proibidos (banimento + violação contratual)
- Não contornar CAPTCHA: ao acionar, parar completamente (contornar medidas técnicas é linha vermelha do Artigo 285 do Código Penal chinês)
- Não realizar coleta em escala: robots.txt desabilita todo o site; destina-se a uso pessoal em pequena quantidade; sequencial com intervalos de segundos, máximo 500 artigos por dia
- Não uso comercial nem distribuição: artigos são protegidos por direitos autorais; uso pessoal para estudo e pesquisa enquadra-se como uso justo (desde que: não distribuir, não usar comercialmente, manter atribuição)
- Camada de descoberta sujeita a limitação dinâmica de frequência (testado em 2026-08-13:
1520 requisições / 30 minutos aciona CAPTCHA IP, não desbloqueia automaticamente em horas): sequencial em baixa frequência (recomendado ≤ 10 requisições / 30 minutos); ao acionar, parar completamente, aguardar recuperação, não tentar contornar