Apify e Proxies Móveis: um guia passo a passo do zero ao lançamento na nuvem
Sumário do artigo
- Introdução
- Preparação prévia
- Conceitos básicos e o que é apify
- Passo 1: por que proxies móveis na raspagem em nuvem
- Passo 2: registro no apify e preparação do espaço de trabalho
- Passo 3: criação do ator e upload do template
- Passo 4: configuração de proxies no ator
- Passo 5: exemplo de tarefa: coleta de dados dos cartões de produtos
- Verificação do resultado
- Erros comuns e soluções
- Funcionalidades adicionais
- Conclusão
Introdução
Neste guia passo a passo, você configurará uma raspagem da web em nuvem completa no Apify usando proxies móveis, criará um ator com Node.js, executará uma tarefa de teste para coletar cartões de produtos e aprenderá a gerenciar limites de forma segura para evitar erros e bloqueios. O guia é voltado para iniciantes, mas inclui seções para usuários avançados. No final, você terá um ator pronto para reutilização, um esquema funcional de proxies, verificação de resultados, checklists, análise de erros comuns e dicas de otimização. Se você precisar de uma resposta rápida para uma pergunta prática, acesse imediatamente a seção FAQ, mas para um resultado completo, siga todos os passos.
Para quem é este guia: para aqueles que querem entender como lançar um ator Apify com proxies móveis sem passar semanas analisando a documentação. Será útil para profissionais de marketing, analistas, pesquisadores, proprietários de projetos na internet e desenvolvedores iniciantes que precisam de uma coleta de dados confiável e repetível da web.
O que você precisa saber de antemão: conceitos básicos de JavaScript serão úteis, mas não obrigatórios. Vamos detalhar onde clicar, o que inserir e como verificar o resultado. É importante saber como autenticar-se no serviço web, copiar tokens de acesso e trabalhar com senhas de forma cautelosa.
Quanto tempo será necessário: 2–3 horas para um percurso completo, incluindo registro, configuração do ator, integração de proxies, execução de teste e verificação de resultados. Se você já possui uma conta no Apify e acesso a proxies móveis, conseguirá completar em 60–90 minutos.
Preparação Prévia
Ferramentas, programas e acessos necessários
- Conta Apify com acesso ao lançamento de atores.
- Node.js versão LTS (18 ou superior) no computador local, se você quiser editar o código localmente. É possível usar o editor embutido no Apify, mas localmente é mais conveniente.
- Credenciais para os proxies móveis. Como exemplo, utilizamos o provedor mobileproxy.space, onde é possível obter login, senha e endereço do proxy. Você pode utilizar qualquer serviço similar.
- Editor de texto: VS Code ou qualquer outro.
- Apify CLI (opcional) para desenvolvimento local e upload do ator na nuvem.
Requisitos do Sistema
- Acesso estável à internet.
- Windows, macOS ou Linux. Para trabalhar localmente com o ator, qualquer computador moderno servirá.
- 200–500 MB livres no disco para dependências do npm, caso você opte pelo desenvolvimento local.
O que baixar e instalar
- Instale o Node.js a partir do site oficial, escolhendo a versão LTS. Após a instalação, verifique com o comando no terminal: node -v e npm -v. Espera-se que você veja as versões sem erros.
- Instale o Apify CLI (opcional) com o comando: npm i -g apify-cli. Após a instalação, verifique: apify --version.
- Prepare as credenciais para os proxies móveis: host, porta, login e senha. Se estiver usando mobileproxy.space, você receberá um endereço do tipo host:port e um par user:password.
⚠️ Atenção: Nunca publique logins e senhas de proxy em repositórios abertos. Utilize variáveis de ambiente ou segredos da plataforma.
Criação de Cópias de Segurança
Se você estiver editando o código localmente, mantenha uma cópia de segurança do projeto (por exemplo, usando git). Na plataforma Apify, o próprio sistema armazena versões dos atores, mas é melhor ter um backup local do código.
Dica: Se você está trabalhando com o Apify pela primeira vez, comece diretamente no navegador através do editor na interface da plataforma, e adicione o desenvolvimento local depois. Isso acelerará o início.
Conceitos Básicos e O que é Apify
Termos-chave em linguagem simples
- Apify — plataforma para automatizar tarefas na web: raspagem, crawling, integrações. Permite executar código (atores) na nuvem, armazenar resultados (Datasets) e gerenciar filas de URLs.
- Ator — aplicativo containerizado (geralmente em Node.js ou Python) que executa a sua tarefa: abre páginas, coleta dados, salva resultados.
- Tarefa (Task) — configuração salva para executar um ator com entrada pré-preenchida. Útil para reinícios regulares sem alterar o código.
- Dataset — armazenamento dos resultados da raspagem em forma de tabela. Pode ser exportado em JSON, CSV, XLSX.
- Key-Value Store — armazenamento de arquivos e configurações arbitrárias (por exemplo, parâmetros de entrada, relatórios).
- Request Queue — fila de URLs para o crawler, para armazenar e processar URLs de maneira sistemática.
- ProxyConfiguration — configuração de proxies. Pode-se usar proxies do Apify ou externos, incluindo móveis.
- Proxies Móveis — proxies que utilizam redes móveis. Muitas vezes são reconhecidos pelos sites como tráfego móvel real.
Princípios Básicos de Funcionamento
Você escreve um ator, passa parâmetros de entrada a ele e o executa na nuvem. O ator recebe uma lista de URLs, as acessa através do crawler escolhido (por exemplo, CheerioCrawler para páginas HTML leves ou PlaywrightCrawler para sites complexos), coleta dados e os grava no Dataset. Para requisições na web, o ator utiliza proxies de acordo com a ProxyConfiguration. Quando é necessário uma coleta estável com baixa taxa de falsos positivos de proteção, utilizam-se proxies móveis. Eles permitem distribuir a carga e se apresentar ao alvo como um usuário móvel.
O que é importante entender antes de começar
- Respeite as regras dos sites-alvo e a legislação vigente. Use a coleta de dados de forma ética e legal.
- Mesmo proxies móveis não garantem imunidade a restrições. O ritmo das requisições, delays, cabeçalhos HTTP corretos e a qualidade do código do crawler são importantes.
- Os limites da plataforma Apify e do seu plano influenciam no paralelismo, memória e tempo de execução. Isso pode ser configurado e monitorado.
Dica: Se a API oficial do alvo estiver disponível, comece por ela. Isso é mais estável e ético do que a raspagem de HTML.
Passo 1: Por que proxies móveis na raspagem em nuvem
Objetivo da Etapa
Entender em quais casos os proxies móveis proporcionam os melhores resultados e como ajustar as configurações para minimizar bloqueios e instabilidades ao trabalhar na nuvem.
Instruções Detalhadas Passo a Passo
- Defina o objetivo da coleta de dados: lista de produtos, preços, avaliações, horários, notícias. Anote os tipos específicos de páginas e seus URLs aproximados.
- Avalie a complexidade do site: a página abre sem JavaScript? Quão rápido carrega? Há carregamento dinâmico? Se o site for simples, o CheerioCrawler é suficiente; se for complexo, use o PlaywrightCrawler.
- Decida se uma sessão móvel é necessária: se o site é claramente voltado para usuários móveis e exibe versões diferentes para clientes móveis e desktop, proxies móveis ajudarão a parecer natural.
- Escolha um provedor de proxies móveis. Como exemplo, utilize o mobileproxy.space. Verifique se você tem um host estável, porta, login e senha. Anote-os separadamente.
- Planeje a frequência das requisições. Comece com 1–2 abas simultâneas e 1–3 requisições por segundo. Se necessário, aumente lentamente, observando erros e respostas do site.
- Decida se você usará rotação de IP. Para proxies móveis, a rotação pode ocorrer por comando ou por timer com o provedor. Verifique a política e comandos de rotação com seu provedor.
Pontos Importantes
Proxies móveis são adequados quando se deseja reduzir a probabilidade de falsos positivos de proteção ou simular o comportamento de um cliente móvel. Não use para ações proibidas pelo site ou pela lei. Configure corretamente os cabeçalhos User-Agent e delays.
⚠️ Atenção: Não tente contornar restrições técnicas dos sites. Se a página estiver bloqueada por autenticação ou termos de uso, atue conforme as regras do recurso.
Resultado Esperado
Você entenderá para que servem os proxies móveis, escolheu um provedor e está pronto para a configuração no ator. Você tem as credenciais do proxy e um plano de frequência de requisições.
Possíveis Problemas e Soluções
- Não está claro se a versão móvel é necessária. Solução: abra o site com um User-Agent móvel no navegador do desenvolvedor e compare o markup. Se a diferença for significativa, a sessão móvel é pertinente.
- Dúvidas sobre a confiabilidade do provedor. Solução: teste a conexão através do curl com seu proxy, verificando a estabilidade por 10–15 minutos.
✅ Verificação: Você possui as informações exatas do proxy (host, porta, login, senha) e anotou a frequência de requisições desejada.
Passo 2: Registro no Apify e Preparação do Espaço de Trabalho
Objetivo da Etapa
Criar ou confirmar uma conta no Apify, acessar o console, instalar o Apify CLI se necessário e preparar-se para criar um ator.
Instruções Detalhadas Passo a Passo
- Registre-se no Apify. Insira seu e-mail, crie uma senha e confirme seu e-mail. Após o login, o console será aberto com as seções Actors, Tasks, Storage.
- Acesse o perfil e encontre seu token API pessoal. Copie-o para um local seguro, ele será útil para o CLI e integrações.
- Se estiver usando o CLI: instale o apify-cli com o comando npm i -g apify-cli. Em seguida, execute apify login e cole o token. Após o login bem-sucedido, você verá uma confirmação no terminal.
- Criando uma pasta de trabalho localmente se optar pelo desenvolvimento local. Execute apify create e escolha um template em Node.js com Crawlee. A estrutura do projeto será criada, junto com o package.json e src/main.js.
- Se você está trabalhando apenas no navegador: clique em New na seção Actors e escolha o template Node.js + Crawlee. A plataforma criará um ator vazio e abrirá o editor online.
Pontos Importantes
A segurança do token é crítica. Não cole o token no código. Armazene-o em um gerenciador de senhas. No CLI, ele é salvo localmente e não vai para o repositório, a menos que você adicione manualmente.
Dica: Nomeie o ator de forma significativa, por exemplo, mobile-crawler-products. Isso facilitará a navegação e automação.
Resultado Esperado
Você entrou no console do Apify, se desejou configurou o CLI, criou um ator vazio e vê o arquivo main.js no editor (ou localmente na pasta src).
Possíveis Problemas e Soluções
- CLI não vê o token. Solução: execute apify logout e em seguida apify login novamente. Verifique se você está inserindo o token atual do perfil.
- Erros ao instalar dependências do npm. Solução: atualize o Node.js para LTS, limpe o cache do npm com o comando npm cache clean --force e tente a instalação novamente.
✅ Verificação: Você tem um ator criado com acesso para edição do código e a estrutura básica do projeto no lugar.
Passo 3: Criação do Ator e Upload do Template
Objetivo da Etapa
Preencher o ator com código inicial no Crawlee, para que você possa iniciar o crawler e verificar a funcionalidade básica sem proxies.
Instruções Detalhadas Passo a Passo
- Abra o arquivo main.js. Se ele não existir, crie src/main.js. Verifique se o package.json contém as dependências do crawlee e apify.
- Insira o código básico do crawler. Exemplo para CheerioCrawler: import { CheerioCrawler, Dataset } from "crawlee"; export const main = async () => { const startUrls = ["https://example.com/"]; const crawler = new CheerioCrawler({ requestHandler: async ({ request, $, log }) => { const title = $("title").text(); await Dataset.pushData({ url: request.loadedUrl, title }); log.info(`Salvo: ${request.loadedUrl}`); }, maxConcurrency: 2, requestHandlerTimeoutSecs: 60, }); for (const url of startUrls) await crawler.addRequests([url]); await crawler.run(); };
- Salve o arquivo. Se estiver no navegador, clique no botão Save. Se localmente, salve as alterações e execute npm install para puxar as bibliotecas (caso ainda não tenha feito).
- Tente executar sem proxies: inicie o ator com a entrada padrão. No Dataset, deve aparecer pelo menos um objeto com o campo title.
Pontos Importantes
MVP mínimo do ator é necessário para checar a pipeline: execução, logging, e salvamento dos resultados. Antes de adicionar proxies, verifique se o código funciona em uma página simples.
Dica: Comece com uma ou duas URLs iniciais. Isso acelerará os testes e facilitará a localização de problemas.
Resultado Esperado
O ator inicia com sucesso e salva resultados no Dataset. Você vê logs indicando que os dados foram salvos e não há erros como DNS ou timeouts de rede.
Possíveis Problemas e Soluções
- Erro ao importar pacotes. Solução: verifique as versões no package.json. Se necessário, execute npm i crawlee apify.
- Não há dados no Dataset. Solução: verifique o seletor $("title").text() ou substitua por outra seleção simples, como $("h1").first().text().
✅ Verificação: No Dataset, deve haver pelo menos um objeto com os campos url e title. Os logs mostram sucesso sem exceções.
Passo 4: Configuração de Proxies no Ator
Objetivo da Etapa
Conectar proxies móveis ao ator Apify de forma que todo o tráfego de rede do crawler passe pelo proxy especificado, verificando a estabilidade da conexão.
Instruções Detalhadas Passo a Passo
- Prepare a string do proxy. Formato para um proxy HTTP externo: http://USERNAME:PASSWORD@HOST:PORT. Exemplo: http://user123:pass456@proxy.mobileproxy.space:12345. Para mobileproxy.space, use as credenciais do painel de controle.
- Adicione ProxyConfiguration ao código. Para CheerioCrawler: import { CheerioCrawler, Dataset, ProxyConfiguration } from "crawlee"; export const main = async () => { const proxy = new ProxyConfiguration({ proxyUrls: ["http://USERNAME:PASSWORD@HOST:PORT"] }); const crawler = new CheerioCrawler({ proxyConfiguration: proxy, requestHandler: async ({ request, $, log }) => { const title = $("title").text(); await Dataset.pushData({ url: request.loadedUrl, title }); log.info(`Salvo: ${request.loadedUrl}`); }, maxConcurrency: 2, requestHandlerTimeoutSecs: 60, }); await crawler.addRequests(["https://httpbin.org/ip"]); await crawler.run(); };
- Salve as alterações e execute o ator. Se tudo estiver correto, no Dataset você verá o endereço IP que pertence ao seu proxy móvel (para httpbin.org/ip isso será um JSON com origin ou IP do proxy).
- Se você estiver usando PlaywrightCrawler, adicione a mesma ProxyConfiguration nos parâmetros do construtor: import { PlaywrightCrawler, Dataset, ProxyConfiguration } from "crawlee"; const proxy = new ProxyConfiguration({ proxyUrls: ["http://USERNAME:PASSWORD@HOST:PORT"] }); const crawler = new PlaywrightCrawler({ proxyConfiguration: proxy, launchContext: { launchOptions: { headless: true } }, requestHandler: async ({ page, request, log }) => { const title = await page.title(); await Dataset.pushData({ url: request.loadedUrl, title }); log.info(`Salvo: ${request.loadedUrl}`); } });
- Se necessário, mova a string do proxy para uma variável de ambiente e leia-a através do process.env, para não armazenar a senha no código. Na plataforma Apify, use a seção Segredos e Variáveis de Ambiente nas configurações do ator. Exemplo: const proxyUrl = process.env.MOBILE_PROXY_URL;
Pontos Importantes
Não misture ao mesmo tempo o Apify Proxy e uma configuração de proxy móvel externa. Durante uma única execução, use uma fonte de proxy clara. A configuração através de proxyUrls substitui completamente o uso de proxies Apify.
Dica: Primeiro, teste o proxy em páginas simples como https://httpbin.org/ip ou serviços similares de exibição de IP. Assim você saberá imediatamente que o tráfego está passando pelo endereço correto.
⚠️ Atenção: Se o provedor de proxies móveis suportar rotação de IP por URL especial ou comando, utilize isso apenas de acordo com suas regras. Não troque de IP com muita frequência sem necessidade: isso pode levantar suspeitas no site alvo.
Resultado Esperado
O crawler está conectado corretamente ao proxy móvel. Ao verificar o IP (através de uma página de controle), você vê o endereço do proxy. Os logs estão estáveis e as requisições não falham devido a timeouts.
Possíveis Problemas e Soluções
- 401 ou 407 nos logs. Causa: login ou senha incorretos. Solução: verifique as credenciais do painel do provedor.
- ECONNRESET ou ETIMEDOUT. Causa: instabilidade no canal ou bloqueio do domínio. Solução: diminua o paralelismo, reinicie após uma pausa e verifique o status do proxy com o provedor.
✅ Verificação: O Dataset contém o resultado da requisição à página de exibição de IP, onde é visível o endereço do proxy móvel.
Passo 5: Exemplo de Tarefa: Coleta de Dados dos Cartões de Produtos
Objetivo da Etapa
Coletar dados de cartões de produtos reais, usando proxies móveis e configurações robustas do crawler, e salvar os resultados no Dataset.
Instruções Detalhadas Passo a Passo
- Defina a lista-alvo de URLs dos cartões ou categorias onde é seguro e legal coletar dados abertos. Anote 3–5 links para teste.
- Escolha o crawler. Se a página é estática, use o CheerioCrawler. Se os dados carregam dinamicamente, escolha o PlaywrightCrawler.
- Adicione seletores principais para extração de dados. Por exemplo: nome do produto, preço, moeda, avaliação, disponibilidade. No Cheerio, estes serão seletores similares ao jQuery; no Playwright — page.locator.
- Exemplo para CheerioCrawler: import { CheerioCrawler, Dataset, ProxyConfiguration, log } from "crawlee"; export const main = async () => { log.setLevel(log.LEVELS.INFO); const proxy = new ProxyConfiguration({ proxyUrls: [process.env.MOBILE_PROXY_URL] }); const startUrls = ["https://example.com/product/1", "https://example.com/product/2"]; const crawler = new CheerioCrawler({ proxyConfiguration: proxy, maxConcurrency: 2, requestHandlerTimeoutSecs: 90, requestHandler: async ({ request, $, log }) => { const title = $("h1.product-title").text().trim(); const priceText = $("span.price").text().trim(); const availability = $("div.stock").text().trim(); const currency = priceText.replace(/[0-9.,\s]/g, ""); const price = parseFloat(priceText.replace(/[^0-9.,]/g, "").replace(",", ".")) || null; await Dataset.pushData({ url: request.loadedUrl, title, price, currency, availability }); log.info(`Salvo: ${title || "sem título"}`); }, failedRequestHandler: async ({ request, log }) => { log.warning(`Falha ${request.url}`); } }); await crawler.addRequests(startUrls); await crawler.run(); };
- Exemplo para PlaywrightCrawler: import { PlaywrightCrawler, Dataset, ProxyConfiguration } from "crawlee"; export const main = async () => { const proxy = new ProxyConfiguration({ proxyUrls: [process.env.MOBILE_PROXY_URL] }); const startUrls = ["https://example.com/product/1"]; const crawler = new PlaywrightCrawler({ proxyConfiguration: proxy, requestHandlerTimeoutSecs: 120, launchContext: { launchOptions: { headless: true } }, requestHandler: async ({ page, request, log }) => { await page.waitForLoadState("domcontentloaded"); const title = await page.title(); const price = await page.locator("span.price").first().textContent().catch(() => null); await Dataset.pushData({ url: request.loadedUrl, title, price }); log.info(`Salvo: ${request.loadedUrl}`); } }); await crawler.addRequests(startUrls); await crawler.run(); };
- Salve o MOBILE_PROXY_URL nas variáveis de ambiente do ator na plataforma Apify (seção Configurações → Variáveis de Ambiente). Valor: sua string de proxy do tipo http://user:pass@host:port.
- Execute o ator. No log, acompanhe o status da requisição, tempo de resposta e número de registros salvos com sucesso.
Pontos Importantes
A estrutura dos dados no Dataset deve ser previsível: defina campos idênticos para todos os cartões, ou a exportação para tabelas será incómoda. Controle os timeouts: para páginas dinâmicas, aumente requestHandlerTimeoutSecs e adicione esperas de carregamento dos seletores-chave.
Dica: Para uma carga suave, defina delays mínimos/máximos entre requisições com as configurações de pool autoscaled ou manualmente adicione pausas no handler.
Resultado Esperado
O Dataset contém um registro por cartão de produto com os campos-chave. Os logs estão estáveis, não há erros de autenticação do proxy, e o tempo médio de resposta é aceitável para o seu caso.
Possíveis Problemas e Soluções
- Seletores incorretos. Causa: design responsivo ou estrutura da página diferente. Solução: verifique as versões móvel e desktop e use seletores mais robustos (atributos data, IDs únicos).
- Campos vazios com dados. Causa: valores carregados dinamicamente. Solução: adicione uma espera explícita para os elementos necessários ou use Playwright ao invés de Cheerio.
✅ Verificação: No Dataset há registros com url, title, price ou campos equivalentes. A taxa média de erro é baixa e abaixo de 5–10% na amostra de teste.
Passo 6: Limites e Otimização
Objetivo da Etapa
Configurar paralelismo, timeouts, tentativas, rotação e armazenamento para utilizar de forma econômica os limites do Apify e aumentar a resistência da coleta.
Instruções Detalhadas Passo a Passo
- Limite o paralelismo. Nas configurações do crawler, defina maxConcurrency entre 1 e 3 para começar. Aumente gradualmente. Quanto maior o paralelismo, maior a carga nos proxies e no site.
- Configurar tentativas. No Crawlee há retryCount e retryTimeoutMillis. Defina retryCount = 1–2, para não insistir em páginas problemáticas indefinidamente.
- Gerencie o tempo de execução. Aumente requestHandlerTimeoutSecs para 90–120 para páginas pesadas. Isso diminuirá os falsos timeouts em respostas lentas através da rede móvel.
- Adicione delays aleatórios. Insira pequenas pausas de 300–1500 ms entre as requisições. Isso parece mais natural e reduz o risco de restrições.
- Planeje a rotação de proxies com seu provedor em limites razoáveis. Se o mobileproxy.space permitir solicitar um novo IP através de timer, escolha um intervalo que não interfira na estabilidade das sessões.
- Monitore os limites do Apify: memória, CPU, tempo. Nas configurações de execução, especifique a Memória (por exemplo, 1024–2048 MB para Playwright) e o Tempo máximo de execução (por exemplo, 30–60 minutos para batches).
- Armazene apenas os campos necessários. Quanto menos dados desnecessários no Dataset, menor a carga no armazenamento e mais rápido será o exporte. Remova fragmentos HTML que não são necessários.
- Ative o logging em nível INFO e opcionalmente em DEBUG durante a depuração. Um volume excessivo de logs pode dificultar a leitura e não é necessário em modo estável.
Pontos Importantes
A economia de limites é alcançada com algumas regras simples: baixo paralelismo inicial, tentativas curtas, seletores exatos e minimização de acessos desnecessários à página. A observação através de logs e monitoramentos ajuda a ajustar as configurações.
Dica: Registre URLs bem-sucedidas no Key-Value Store ou em armazenamento externo. Isso facilitará reiniciar de onde parou e evitará processar novamente páginas já coletadas.
Resultado Esperado
O ator opera suavemente, não consome recursos desnecessários, e os erros ocorrem de forma rara e previsível. Os parâmetros de timeouts e paralelismo são ajustados à velocidade do seu proxy móvel e à complexidade do site.
Possíveis Problemas e Soluções
- Aumento de timeouts não ajuda. Causa: sobrecarga da página ou problemas com o provedor. Solução: reduza temporariamente o paralelismo para 1 e verifique a estabilidade da conexão.
- Velocidade muito lenta. Causa: ponto de estrangulamento na rede proxy ou site pesados. Solução: aumente os delays, mas ao mesmo tempo, pense em dividir as tarefas em batches menores.
✅ Verificação: O tempo médio por página é estável, a taxa de erro não aumenta com o aumento do volume e os limites de memória e tempo não são excedidos.
Verificação do Resultado
Checklist: o que deve funcionar
- O ator inicia sem erros e conclui corretamente a execução.
- Os proxies móveis estão conectados, e o IP nas requisições de verificação corresponde ao proxy.
- O Dataset contém os campos e valores esperados.
- Os logs são informativos, mas não excessivos.
- Em reinícios, não há duplicatas desnecessárias (ou elas são controladas).
Como testar
- Execute o ator em 2–3 URLs de teste com o proxy ativado e verifique o IP através da página indicadora.
- Compare os números: quantas requisições foram adicionadas e quantos resultados você obteve. Eles devem coincidir ou diferir dentro de uma margem de erro compreensível.
- Exporte o Dataset para CSV e verifique se os dados estão limpos: sem null onde você espera valores.
Métricas de Execução Bem-Sucedida
- A taxa de requisições malsucedidas é inferior a 5–10% no teste.
- O tempo médio de processamento da página é estável e previsível.
- Não há picos anômalos de timeouts e erros de autenticação de proxy.
Dica: Mantenha um conjunto de URLs de controle e realize testes antes de cada grande mudança no código. Assim, você rapidamente detectará regressões.
Erros Comuns e Soluções
- Problema: 407 Proxy Authentication Required. Causa: credenciais do proxy incorretas. Solução: verifique login e senha, atualize as variáveis de ambiente e reinicie o ator.
- Problema: ECONNRESET e ETIMEDOUT nos logs. Causa: instabilidade da rede ou sobrecarga. Solução: reduza o maxConcurrency, aumente os timeouts e insira pausas entre requisições.
- Problema: campos vazios no Dataset. Causa: seletores incorretos ou carregamento dinâmico. Solução: use o PlaywrightCrawler, adicione esperas, revise os seletores.
- Problema: limite de memória alcançado. Causa: muitas abas paralelas ou armazenamento de dados desnecessários. Solução: reduza o paralelismo, diminua o volume de dados, aumente a Memória nas configurações de execução.
- Problema: coleta muito lenta. Causa: páginas pesadas e rede móvel. Solução: priorize a fila com base na importância dos dados, divida a tarefa em batches e otimize seletores, desabilitando navegações desnecessárias.
- Problema: duplicatas nos resultados. Causa: reinício com os mesmos URLs sem filtro. Solução: mantenha uma lista de URLs processadas na Request Queue, garantindo a unicidade, ou verifique duplicatas antes de salvar.
- Problema: site sensível reage a requisições frequentes. Causa: ritmo muito agressivo. Solução: reduza a velocidade, adicione jitter nos delays, use cabeçalhos corretos e um User-Agent atualizado.
Dica: Durante a depuração, ative logs detalhados para um ou dois URLs e analise cada passo. Isso é mais rápido do que lidar com longas batches.
Funcionalidades Adicionais
Configurações Avançadas
- Segredos e configurações. Armazene MOBILE_PROXY_URL e outras chaves na seção Segredos. No código, leia através do process.env.
- Mudança de User-Agent. Para simular um cliente móvel, defina um User-Agent móvel e a largura correspondente do viewport no Playwright. Faça isso moderadamente e apenas se necessário para a exibição correta da página.
- Agendador de Tarefas. Crie uma Tarefa e defina um cronograma de execuções (diariamente, a cada hora). Monitore limites e volumes de resultados.
Otimização
- Cache. Se as páginas mudam raramente, adicione cache de requisições e visitas repetidas para não desperdiçar proxies e limites.
- Filas e Prioridades. Trabalhe com Request Queue, atribuindo prioridade a links importantes e ignorando os secundários.
- Divisão em Microsserviços. Divida uma tarefa complexa em vários atores: coleta de links, processamento de cartões, validação e exportação.
O que mais pode ser feito
- Integrações via API. Conecte o envio de resultados ao seu CRM ou sistema analítico após cada execução através de Webhook.
- Validação de Dados. Antes da exportação, verifique os esquemas: para que todos os valores estejam no tipo e intervalo esperados.
- Links Internos do Documento. Se necessário, retorne à seção Limites e Otimização ao ajustar o desempenho.
Dica: Use o modo de pré-visualização e batches pequenos para uma execução inicial no cronograma, e então amplie gradualmente.
FAQ
- Como saber se o proxy é realmente móvel? Verifique ASN e tipo de rede pelo IP através de bancos de dados de terceiros e compare com operadores móveis. Além disso, proxies móveis costumam ter um pool característico de endereços com dinâmica de mudança.
- Posso usar vários proxies móveis ao mesmo tempo? Sim, especifique vários proxyUrls. O Crawlee escolherá automaticamente um da lista. Monitore os limites de cada proxy.
- O que fazer se o site mostrar um captcha? Diminua a frequência, adicione delays, verifique cabeçalhos e considere usar a API oficial do recurso. Evite ações que violem as regras do site.
- Como armazenar senhas de proxies com segurança? Utilize variáveis de ambiente e Segredos na plataforma Apify. Não faça commit de senhas no git.
- É necessário mudar o User-Agent para móvel? Apenas se o site entregar versões diferentes da página. Nos demais casos, o comportamento estável e delays corretos são suficientes.
- Por que o CheerioCrawler é mais rápido? Ele não renderiza a página, apenas parseia o HTML. Para páginas dinâmicas, use o PlaywrightCrawler, embora seja mais lento.
- Como exportar resultados? No interface do Dataset, escolha exportar para CSV, JSON, XLSX. Ou utilize a API Datasets se quiser automatizar a exportação.
- É possível combinar Apify Proxy e proxies móveis? Em uma única execução, é melhor usar apenas um. Se precisar de diferentes fontes, divida as tarefas por ator ou por configurações de execução.
- Quantas requisições por segundo são seguras? Comece com 1–3 por segundo e monitore as métricas. Para sites sensíveis, reduza para 0.2–0.5 com pauses.
- É necessário incluir headful no Playwright? Apenas para depuração. Em produção, use headless para economizar recursos.
Conclusão
Você configurou um ator de trabalho no Apify com proxies móveis, compreendeu os conceitos-chave e princípios, coletou dados de teste a partir de cartões de produtos e otimizou os limites. Agora, você gerencia com confiança o paralelismo, o tempo de espera e o armazenamento dos resultados, além de saber como proteger segredos e senhas. A partir daqui, você pode expandir o projeto: adicionar novos tipos de páginas, construir um pipeline com vários atores, conectar um agendador e exportações automáticas. Se surgirem dúvidas pontuais, volte para a seção FAQ ou para Limites e Otimização. Lembre-se de que proxies móveis são uma ferramenta para aumentar a estabilidade e naturalidade do tráfego, não uma maneira de contornar restrições. Trabalhe eticamente, respeite as regras dos sites e sempre comece pequeno, verificando cada mudança.