Saltar para o conteúdo
Comece grátis
Voltar ao blogue

Gestão de proxies para a extração de dados da Web: um projeto prático

Raluca PenciucÚltima atualização em 16 min read
Gestão de proxies para a extração de dados da Web: um projeto prático
TL;DR: A gestão de proxies para web scraping é a camada de políticas que atribui tarefas autorizadas a rotas de rede adequadas e acompanha o que acontece a seguir. Mantenha separados o estado da sessão, a integridade da rota e os limites de pedidos de origem. Alterne ou retire uma rota por uma razão operacional documentada, e não como resposta automática a todas as páginas com falha.

Um trabalhador recebe uma página de produto vazia e marca o seu proxy como inativo. Outro trabalhador opta imediatamente por uma nova rota e repete a solicitação. Após várias tentativas, o conjunto de proxies parece estar com problemas, mas a falha real é um analisador que espera um elemento que a fonte removeu.

Isso é um problema de gestão antes de ser um problema de rede. O sistema tomou uma decisão de encaminhamento utilizando evidências da camada errada. Adicionar mais endereços tornaria o erro maior, não mais correto.

Um gestor de proxies útil faz mais do que apenas escolher o próximo ponto final. Sabe que tarefas exigem continuidade, quais as rotas que cumprem os requisitos de localização aprovados, quanto tráfego a fonte pode receber e quando um operador deve analisar uma falha. O seu sucesso é medido por observações válidas fornecidas no âmbito da política de recolha, e não pela frequência com que altera endereços.

Este guia descreve esse design para programadores que operam coletores autorizados. Os exemplos são recomendações de arquitetura originais, não um ponto de referência de um fornecedor. Pode aplicar os mesmos limites a um pequeno trabalhador baseado em configuração ou a um serviço de recolha partilhado de maior dimensão.

Comece a gestão de proxies para web scraping com um contrato

Defina o que um item de trabalho necessita antes de atribuir uma rota. Um contrato útil inclui o destino permitido, a região pretendida (quando relevante), o prazo, os requisitos da sessão e o tipo de saída esperado. Mantenha as credenciais fora da representação de diagnóstico normal do item de trabalho. O contrato deve descrever a intenção, não expor todas as definições de ligação específicas do fornecedor.

Em seguida, faça um inventário das rotas que pode efetivamente utilizar. Registe o tipo de produto, os protocolos suportados, o método de autenticação, as utilizações aprovadas, as capacidades de localização e quaisquer limites de ligação ou de tráfego. Distinga um endereço de saída individual de um gateway que escolhe uma saída por si. Têm ciclos de vida diferentes e não devem partilhar um campo ambíguo chamado simplesmente proxy.

A configuração do fornecedor não é portável apenas pela ortografia. O guia de início rápido do proxy da Oxylabs ilustra pontos finais específicos do produto e diferentes mecanismos para a seleção de localização e sessão. Trate essa documentação como entrada para um adaptador, e não como um motivo para incorporar a sintaxe do nome de utilizador de um fornecedor em todo o seu código de extração.

Adicione exclusões explícitas. Algumas tarefas devem permanecer numa infraestrutura controlada; outras não podem enviar cookies a terceiros; outras ainda não necessitam de encaminhamento de rede alternativo. Um gestor deve ser capaz de rejeitar tarefas incompatíveis, em vez de escolher silenciosamente a opção disponível mais próxima.

Por fim, defina a aceitação separadamente da entrega. A receção de bytes satisfaz uma observação de transporte. A produção de um registo corretamente identificado e atempado satisfaz um requisito de dados. Manter essa distinção desde o primeiro documento de conceção evita que o sistema de saúde confunda um defeito da aplicação com um percurso de rede com falha.

Atribua percursos com base em políticas, em vez de seleção aleatória

A seleção aleatória pode distribuir trabalho independente, mas não constitui uma política de atribuição completa. Primeiro, filtre os candidatos em função dos requisitos obrigatórios: protocolo, âmbito de destino aprovado, localização e compatibilidade de sessão. Em seguida, considere a disponibilidade e a capacidade. A seleção entre os candidatos elegíveis é o passo final, não o primeiro.

Requisito de trabalho

Regra de atribuição

Falha em prevenir

Página independente de leitura apenas

Utilizar uma rota disponível e elegível

Acoplamento desnecessário de sessões

Fluxo de trabalho permitido em várias etapas

Alugar uma rota para o fluxo de trabalho

Mudança de contexto a meio do processo

Observação regional específica

Exigir um encaminhamento verificado e aplicável

Comparação de registos de diferentes mercados

Contexto de pedido sensível

Utilizar apenas infraestrutura aprovada

Envio de informações confidenciais por um caminho não revisto

Prazo de recolha expirado

Não atribuir novas tarefas

Despesas com resultados já inúteis

Atribua um prazo de validade limitado a cada alocação. Uma concessão identifica o proprietário do trabalho e expira ou é libertada quando o fluxo de trabalho termina. Isso ajuda a recuperar capacidade quando um trabalhador falha. Não presuma que a ausência de um sinal de vida comprove que um ponto final da rede está defeituoso; pode significar que o trabalhador ou o plano de controlo falharam.

Mantenha as decisões de atribuição explicáveis. Uma breve justificação, como «região necessária indisponível», é melhor do que um recurso alternativo silencioso que devolva o conteúdo errado. Uma fila pode aguardar por capacidade elegível até ao prazo e, em seguida, produzir um resultado final claro.

Evite complexidade global desnecessária. Uma carga de trabalho modesta pode necessitar de um ficheiro de política estático e de um pequeno armazenamento de concessões, e não de uma plataforma de agendamento distribuída. Adicione coordenação quando vários trabalhadores partilham um recurso limitado ou um orçamento para toda a fonte. A política deve permanecer compreensível à medida que a implementação cresce, porque os responsáveis pela resposta a incidentes ainda precisam de explicar por que razão um pedido utilizou uma rota específica.

Gerir uma sessão como algo mais do que um endereço IP

Um endereço de saída estável é apenas uma parte de algumas sessões, não uma definição completa da sessão. A aplicação pode também depender de cookies, armazenamento do navegador, localização, autenticação e progresso ao longo de uma sequência. Modele estes elementos como estados relacionados, mas distintos, em vez de assumir que um único indicador de encaminhamento preserva tudo.

Um período de validade de sessão deve ter um proprietário, uma hora de início, uma duração prevista e um limite de recuperação. Se a rede sofrer alterações inesperadas, decida se o trabalho pode continuar ou se deve recomeçar a partir de um estado conhecido. Essa decisão cabe ao fluxo de trabalho, não a um gestor de pool genérico que não consegue perceber a semântica da aplicação.

Por exemplo, uma sequência de filtros de catálogo autorizada só poderá produzir resultados comparáveis se a sua região e o estado do filtro se mantiverem consistentes. Se a continuidade for perdida, marque a observação parcial como incompleta. Não combine uma página anterior de um contexto com uma página posterior de outro e as apresente como um conjunto de dados coerente.

O guia sobre cookies HTTP e sessões de scraping explica por que razão o tratamento de cookies deve ocorrer em paralelo com a seleção de rotas, mas não no seu interior. Mantenha os conjuntos de cookies limitados à sessão pretendida. Partilhá-los entre tarefas não relacionadas pode introduzir tanto um contexto incorreto como uma exposição desnecessária de dados.

Liberte o estado deliberadamente quando o fluxo de trabalho terminar. Deixe expirar as alocações, elimine perfis temporários do navegador quando apropriado e retenha apenas os metadados de diagnóstico exigidos pela política. Uma coleção crescente de objetos de sessão esquecidos não constitui resiliência útil. Trata-se de um estado não monitorizado que torna as falhas posteriores difíceis de reproduzir e pode reter informação por mais tempo do que a tarefa exige.

Separe a integridade da rota da integridade da fonte e do analisador

Utilize mais do que uma dimensão de integridade. Uma rota pode alcançar um ponto final controlado enquanto uma determinada fonte recusa o pedido. Uma fonte pode devolver uma página válida enquanto o analisador falha. O sistema de gestão precisa de preservar estas distinções antes de decidir o que colocar em quarentena.

Observação

Camada de investigação provável

Resposta de gestão adequada

Não é possível estabelecer ligação ao gateway

Configuração da rede ou do proxy

Verificar a rota e a conectividade

Autenticação do proxy rejeitada

Credenciais ou lista de permissões

Suspender a configuração afetada

Limite de taxa de destino

Política de tráfego de origem

Reduzir ou suspender o trabalho relevante

Incompatibilidade de identidade da página

Resposta ou contexto de origem

Observação em quarentena para revisão

Falta um campo obrigatório

Layout ou analisador da fonte

Investigue a extração, não todo o conjunto

Quando um intermediário o fornece, o cabeçalho Proxy-Status, definido na RFC 9209, pode fornecer informações de diagnóstico estruturadas sobre o tratamento do proxy. A sua ausência não é prova de que a rota esteja ou não em bom estado. Utilize-o em conjunto com os tempos de resposta, as exceções do cliente e o contexto real da resposta, em vez de o tornar um sinal universal obrigatório.

Defina verificações de integridade para a infraestrutura de que é proprietário ou que está autorizado a testar. Uma verificação mínima pode confirmar a conectividade esperada ou o comportamento de localização sem aceder repetidamente à fonte de produção. Mantenha as verificações limitadas e evite transmitir o estado sensível da sessão para um ponto final de diagnóstico.

O nosso guia de erros de estado do proxy apresenta um fluxo de trabalho de incidentes mais aprofundado. No gestor, a chave é a atribuição: coloque em quarentena a menor unidade afetada, com base em evidências. Uma recusa específica de uma fonte não deve condenar automaticamente todas as rotas, e uma resposta de diagnóstico bem-sucedida não deve promover registos inválidos.

Aplique um ritmo de tráfego a nível da fonte em todo o conjunto de proxies

Um conjunto de proxies maior não implica um orçamento de permissões maior. Se vários trabalhadores recolherem dados de uma única fonte, coordene o ritmo global permitido, em vez de atribuir a cada rota uma cota independente que multiplique o tráfego total. Mantenha a política da fonte acima da alocação da rota na ordem de decisão.

O código HTTP 429 indica limitação de taxa, mas a norma não exige que o servidor conte apenas por endereço IP. A RFC 6585 permite explicitamente outras formas de identificar utilizadores e contar pedidos. A rotação de um endereço, portanto, não estabelece nem permissão nem uma solução eficaz para um fluxo de trabalho com limitação de taxa.

Utilize um limitador partilhado ou outro mecanismo de coordenação adequado ao seu modelo de trabalhadores. Inclua as tentativas de repetição no mesmo orçamento. Uma tentativa de repetição continua a ser uma solicitação à fonte; tratá-la como trabalho em segundo plano gratuito pode fazer com que o período de maior movimento coincida com um incidente.

Respeite as instruções de espera aplicáveis e faça uma pausa quando a janela de recuperação permitida não for compatível com o prazo da tarefa. Reduza o volume de trabalho em vez de tentar preservar o rendimento a qualquer custo. Um registo desatualizado gerado após uma prolongada onda de tentativas pode ser pior do que a ausência explícita de uma observação.

O ritmo adaptativo pode ajudar, mas não substitui a política. A documentação do AutoThrottle do Scrapy descreve um ajuste de atraso baseado na latência que respeita as definições de simultaneidade e atraso configuradas. Se utilizar um mecanismo semelhante, certifique-se de que o seu agrupamento corresponde ao orçamento da fonte que pretende aplicar. Um atraso escolhido automaticamente pode continuar a ser inadequado se cada proxy for tratado incorretamente como uma fonte separada.

Crie observabilidade em torno do trabalho aceite

Registe informação suficiente para associar uma decisão de alocação a um resultado final. Os campos úteis incluem o identificador do trabalho, a referência da rota, a versão da configuração, o grupo de fontes, o tempo, o número de tentativas e a categoria do resultado. Dê preferência a referências opacas em vez de credenciais em bruto ou URLs sensíveis completos. O objetivo é explicar o comportamento, não copiar todas as solicitações para um registo permanente.

Acompanhe tanto as métricas operacionais como as de dados. As falhas de ligação descrevem o comportamento da rota. O rendimento de registos aceites descreve se todo o percurso de recolha produziu resultados úteis. A idade da fila e os incumprimentos de prazos descrevem se isso aconteceu a tempo. Nenhuma percentagem de sucesso isolada capta estes três aspetos.

Divida as métricas em fatias significativas da carga de trabalho. Uma carga de trabalho saudável de páginas estáticas pode ocultar falhas em páginas interativas se tudo for calculado em média. Por outro lado, uma única fonte em mudança não deve fazer com que toda a rede pareça inutilizável. Mantenha as definições das fatias suficientemente estáveis para comparar execuções.

Defina alertas em torno de decisões que alguém possa tomar. «Ocorreram muitos erros» é menos passível de ação do que «a carga de trabalho regional aprovada não tem rotas elegíveis antes do seu prazo». Associe o alerta a um manual de procedimentos com uma condição de paragem, um responsável e as provas a recolher.

Para uma perspetiva de custos, divida as despesas operacionais comparáveis por registos únicos, válidos e atempados, em vez de pelas solicitações enviadas. Inclua o trabalho de manutenção que sofre alterações significativas entre configurações. Não invente um valor monetário para cada mensagem de registo, mas registe o tempo recorrente do operador. Isto permite decidir se um limite de recolha mais gerido eliminaria efetivamente trabalho.

Proteja o plano de controlo e reveja o abastecimento de rede

Mantenha as credenciais de proxy num armazenamento secreto aprovado ou na configuração do ambiente, e não em exemplos de artigos, cargas úteis de tarefas ou painéis públicos. Limite o acesso aos processos que dele necessitam, alterne as credenciais quando necessário e verifique se os colaboradores que saíram da empresa já não mantêm acesso. Proteja os pontos finais de gestão com o mesmo cuidado que o próprio coletor.

Analise o limite de confiança para cada modo de ligação. O que pode o intermediário observar? O fluxo de trabalho envia cookies de autenticação ou corpos de pedidos privados? Dispõe de um acordo aprovado de retenção e tratamento para esses conteúdos? Estas questões são relevantes independentemente de o serviço ser gratuito ou pago.

No caso de redes que envolvam dispositivos de participantes, solicite provas do modelo de obtenção de dados, do processo de consentimento, do mecanismo de retirada de consentimento e do tratamento de abusos. Uma declaração do fornecedor pode orientar a devida diligência, mas não é o mesmo que uma auditoria realizada por si. Registe quais os produtos e acordos abrangidos pela análise, em vez de partir do princípio de que uma afirmação genérica da empresa se aplica a todas as situações.

O acesso à fonte é uma decisão à parte. Uma rede legítima não concede permissão para recolher todos os recursos acessíveis. O Protocolo de Exclusão de Robôs distingue as instruções dos rastreadores da autorização de acesso. Siga as instruções da fonte e o âmbito de recolha aprovado pela organização, e encaminhe os litígios de acesso para um responsável humano.

Forneça aos operadores um controlo de paragem segura que suspenda novas alocações sem destruir o trabalho em fila. Durante um incidente, a capacidade de interromper o tráfego e preservar as provas é mais importante do que manter todos os colaboradores ocupados. Teste esse controlo antes de o sistema precisar dele com urgência.

Implemente alterações nas políticas com um caminho de recuperação

Crie a política de encaminhamento independentemente da lógica de análise. Uma alteração a um requisito de localização ou ao prazo de vigência de uma concessão deve ser visível como uma revisão de configuração, não escondida entre edições de extração não relacionadas. Mantenha a configuração anterior disponível durante um período definido para reversão.

Comece com uma carga de trabalho de baixo risco e inspecione tanto as observações aceites como as rejeitadas. Preserve identificadores de trabalho estáveis para que a repetição não duplique registos. Se comparar configurações em paralelo, mantenha o tráfego combinado dentro do mesmo orçamento de origem aprovado, em vez de duplicar a carga por conveniência.

Teste deliberadamente os limites de falha em ambientes de teste controlados. Deixe um contrato expirar, interrompa um trabalhador, torne uma rota indisponível e atrase uma confirmação de armazenamento. Verifique se o trabalho é recuperado ou claramente marcado como incompleto. Não presuma que o reinício de um processo comprove que os dados estão consistentes.

O guia de web scraping automatizado explica o estado de trabalho duradouro e a recuperação ao nível do pipeline. Um gestor de proxy deve cooperar com esse estado, em vez de manter uma visão isolada do sucesso que o programador não consiga conciliar.

Após a implementação, analise se a nova política melhorou o resultado pretendido. As falhas de sessão diminuíram? O ritmo da fonte manteve-se dentro da política? A carga de trabalho do operador diminuiu efetivamente? Relacione a resposta ao trabalho observado, e não ao tamanho do conjunto. Remova credenciais não utilizadas e configurações obsoletas apenas após a conclusão do período de reversão e da revisão de responsabilidades.

Pontos-chave

  • Filtre as rotas de acordo com requisitos de trabalho explícitos antes de distribuir o tráfego.
  • Mantenha os arrendamentos de encaminhamento, as sessões de aplicação e os orçamentos de pedidos de origem como conceitos separados.
  • Atribua as falhas ao transporte, ao intermediário, à fonte ou à extração antes de alterar o estado de integridade do conjunto.
  • Conte as tentativas de repetição nos limites de fontes partilhadas e mantenha um controlo de pausa seguro.
  • Avalie os registos aceites, o desempenho em termos de prazos e o esforço do operador, e não a frequência de rotação de endereços.

Perguntas frequentes

Cada coletor precisa de um serviço de gestão de proxy separado?

Não. Um coletor pequeno, com um único trabalhador, pode funcionar melhor com uma configuração explícita e um módulo de política simples. Um serviço partilhado torna-se útil quando vários trabalhadores têm de coordenar concessões, credenciais ou orçamentos de fonte. Introduza-o para resolver um problema de coordenação concreto, em vez de partir do princípio de que uma arquitetura de maior dimensão torna automaticamente uma carga de trabalho modesta mais fiável.

Os identificadores de rota devem ser incluídos nos conjuntos de dados empresariais exportados?

Normalmente, mantenha-os em metadados operacionais restritos, em vez de registos acessíveis aos utilizadores. Os utilizadores normalmente precisam de informações de proveniência, tais como o URL de origem, a hora da observação e a versão do esquema. As referências operacionais às rotas podem permanecer ligadas através de um identificador de trabalho para fins de investigação. Esta separação mantém os diagnósticos disponíveis sem expor desnecessariamente detalhes da infraestrutura nem incentivar a lógica a jusante a depender de um fornecedor específico.

Uma rota pode estar em bom estado para uma carga de trabalho e ser inadequada para outra?

Sim. A integridade descreve o comportamento observado em condições específicas, enquanto a adequação depende do contrato de trabalho. Uma rota pode estabelecer ligação corretamente, mas carecer de uma localização necessária ou de um acordo de tratamento aprovado. Mantenha as decisões de elegibilidade separadas das pontuações de integridade, para que uma rota funcional não seja selecionada para um trabalho que nunca se destinou a realizar nem para o qual foi autorizada.

Conclusão

Uma boa gestão de proxies para web scraping começa com a responsabilidade, não com a rotação. Defina o contrato de trabalho, atribua apenas rotas elegíveis e mantenha a distinção entre uma ligação de rede, uma sessão de aplicação e um registo de dados aceite. Essa estrutura evita que falhas não relacionadas sejam tratadas como prova de que todo o conjunto precisa de ser substituído.

Mantenha o ritmo de toda a fonte acima do conjunto de proxies e torne as tentativas de repetição visíveis no mesmo orçamento. Crie observabilidade suficiente para explicar uma atribuição, um estado duradouro suficiente para recuperar trabalho inacabado e um controlo de paragem em que os operadores possam confiar. Reveja as credenciais e a origem da rede como responsabilidades operacionais contínuas, em vez de tarefas de configuração pontuais.

O sistema resultante deverá reduzir a gravidade das falhas e tornar as decisões mais fáceis de auditar. Se a manutenção da camada de recolha de dados é o fardo que pretende eliminar, avalie a API Scraper da WebScrapingAPI em relação ao seu contrato de aceitação e acesso existente. Um limite gerido é útil quando elimina trabalho específico sem ocultar as responsabilidades que a sua aplicação ainda detém.

Sobre o autor

Raluca Penciuc, Desenvolvedor Full-Stack @ WebScrapingAPI

Raluca Penciuc

Desenvolvedor Full-Stack

Raluca Penciuc é programadora Full Stack na WebScrapingAPI, onde desenvolve scrapers, aperfeiçoa estratégias de evasão e procura formas fiáveis de reduzir a deteção nos sites-alvo.

Tutorial de Python do Nodriver: Extração discreta de dados da Web — Do primeiro script à produção
A ciência da extração de dados da Web

Tutorial de Python do Nodriver: Extração discreta de dados da Web — Do primeiro script à produção

TL;DR: Resumo: O Nodriver é uma biblioteca Python assíncrona que controla o Chromium através do Chrome DevTools Protocol, sem Selenium nem o binário chromedriver. Utilize-o quando um navegador furtivo auto-hospedado, mais próximo de uma sessão real do Chrome, é melhor do que uma stack WebDriver, mas saiba que, por si só, não elimina riscos de IP, TLS ou comportamento. Este tutorial vai de um primeiro script à produção em contentores e a uma Browser API alojada.

Suciu Dan15 min read
Ler artigo
Como lidar com URLs de redirecionamento do Google /goto e tokens CAES num scraper de SERP
A ciência da extração de dados da Web

Como lidar com URLs de redirecionamento do Google /goto e tokens CAES num scraper de SERP

TL;DR: Resumo: Os URLs /goto do Google com um token CAES, e os wrappers /url mais antigos, são camadas de redirecionamento, não destinos, por isso um scraper de SERP que trata cada href como final estraga o acompanhamento de posições e as bases de links. Prefira uma API de SERP estruturada quando devolve os links de destino. Quando tiver de analisar HTML, classifique cada href, elimine redirecionamentos duplicados e resolva-os com um GET simples. Não desencripte o CAES.

Suciu Dan13 min read
Ler artigo
Cabeçalhos de resposta HTTP no cURL: Cada flag, técnica e receita de scripting
A ciência da extração de dados da Web

Cabeçalhos de resposta HTTP no cURL: Cada flag, técnica e receita de scripting

TL;DR: O cURL esconde os cabeçalhos de resposta por padrão. Use -i para ver os cabeçalhos junto com o corpo, -I para uma solicitação HEAD que retorna apenas cabeçalhos, -v para depuração completa de solicitação/resposta e -D para salvar cabeçalhos em um arquivo. Para scripts modernos, o cURL 7.83+ permite extrair cabeçalhos individuais ou despejar todos eles como JSON com a opção -w write-out.

Suciu Dan12 min read
Ler artigo

Comece a construir

Pronto para expandir a sua recolha de dados?

Junte-se a mais de 2.000 empresas que utilizam a WebScrapingAPI para extrair dados da Web à escala empresarial, sem quaisquer custos de infraestrutura.