Geonode logo
Carl Gamutan

Carl Gamutan

Atualizado: 7 de outubro de 2026

Publicado: 2 de outubro de 2026

Como utilizar proxies com o Scrapy

O Scrapy é um framework em Python para rastrear e extrair dados em grande escala. Aqui explicamos como ligar um proxy ao Scrapy, configurar a rotação ou uma sessão permanente e resolver os erros que possam surgir.

Por que é que o Scrapy precisa de um proxy

Os proxies para o Scrapy permitem que a ferramenta se ligue através de um endereço IP diferente, em vez de utilizar sempre o IP do computador onde está a ser executada. Isto é útil para tarefas baseadas na localização, testes, monitorização e outras tarefas em que a origem da ligação é importante.

O Scrapy continua a tratar da tarefa principal. O proxy trata da origem da ligação.

O que acontece sem um proxy: bloqueios de IP, limites de taxa e restrições geográficas

Sem um proxy, os sites continuam a ver o mesmo IP. À medida que a atividade aumenta, esse IP pode atingir um limite de taxa ou ser bloqueado.

A localização também pode ser importante. Uma página aberta a partir da Alemanha pode não apresentar o mesmo conteúdo que uma aberta a partir dos EUA.

Um proxy para o Scrapy permite estabelecer ligações a partir de diferentes IPs e localizações, quando necessário.

Que tipo de proxy utilizar com o Scrapy

O tipo de proxy adequado depende da tarefa.

Tipo de proxyScrapingGestão de contasTestesMonitorização
ResidencialAdequado quando a localização e a origem do IP são importantesÚtil quando as contas necessitam de IPs residenciaisAdequado para testes baseados na localizaçãoÚtil para verificar conteúdos a partir de diferentes localizações
ISPAdequado quando é necessário um IP estávelÚtil para sessões mais longas num único IPAdequado para testes com um IP consistenteÚtil para verificações contínuas a partir do mesmo IP
Centro de dadosAdequado para velocidade e maiores volumes de pedidosMelhor quando não são necessários IPs residenciaisAdequado para testes geraisAdequado para verificações automatizadas frequentes

Os proxies residenciais são úteis quando a origem do IP e a localização são importantes. Os proxies de ISP funcionam bem quando é necessário que o mesmo IP permaneça ativo por mais tempo. Os proxies de centro de dados fazem sentido quando o foco principal é a velocidade e a escala.

A melhor opção depende também de a tarefa exigir segmentação geográfica, uma ligação estável ou acesso a um conjunto maior de IPs.

Como ligar um proxy no Scrapy

A configuração do proxy no Scrapy requer o host Geonode, a porta, o nome de utilizador e a palavra-passe. Guarde as credenciais em variáveis de ambiente e, em seguida, carregue-as ao configurar o proxy no código.

Está a utilizar o Geonode? Obtenha o nome de utilizador e a palavra-passe em Credenciais de Acesso e o host, a porta e o protocolo em Informações do Servidor Proxy.

Caminho das definições ou código

Para o nosso teste, adicionámos um middleware de download:

DOWNLOADER_MIDDLEWARES = {
    "geonode_scrapy.middlewares.GeonodeProxyMiddleware": 350,
    "scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 400,
}

O middleware passa o URL do proxy através de request.meta["proxy"]

, que o HttpProxyMiddleware

do Scrapy utiliza em seguida:

request.meta["proxy"] = proxy_url

Também é possível passar o proxy diretamente para um pedido individual:

yield scrapy.Request(
    url,
    meta={"proxy": proxy_url},
)

Mantenha o nome de utilizador e a palavra-passe reais em variáveis de ambiente, em vez de os colocar diretamente no ficheiro Python. Esta configuração devolveu com sucesso um código de estado HTTP 200 através do proxy durante o nosso teste.

O formato de autenticação host:porta:utilizador:palavra-passe

Geonode

fornece quatro valores:

proxy.geonode.io:PORT:USERNAME:PASSWORD

O Scrapy necessita dos mesmos detalhes que um URL de proxy:

http://USERNAME:PASSWORD@proxy.geonode.io:PORT

Guarde as credenciais ou o valor completo do proxy numa variável de ambiente:

GEONODE_PROXY_URL=http://USERNAME:PASSWORD@proxy.geonode.io:PORT

Em seguida, carregue-o no Python:

import os

proxy_url = os.environ["GEONODE_PROXY_URL"]

Para o nosso teste HTTP, o formato resultante foi:

http://USERNAME:PASSWORD@proxy.geonode.io:9000

Para verificar a autenticação, também executámos o pedido com credenciais incorretas. O Scrapy recebeu um código de estado HTTP 407 com a resposta:

Authentication error. Please check your authentication settings.

O Scrapy apresentou a resposta através de HttpErrorMiddleware

como HttpError('Ignoring non-200 response')

.

Rotação vs. sessão fixa no Scrapy

Se as solicitações não precisarem de manter o mesmo IP, utilize a rotação.

Para o nosso teste, passámos o proxy rotativo Geonode

ao Scrapy:

proxy_url = "http://USERNAME:PASSWORD@proxy.geonode.io:9000"

yield scrapy.Request(
    url,
    meta={"proxy": proxy_url},
)

Fizemos cinco solicitações sequenciais:

Request 1: 101.98.231.191
Request 2: 101.98.231.191
Request 3: 101.98.231.191
Request 4: 122.164.83.189
Request 5: 122.164.83.189

Unique IPs: 2
Rotation: Yes

O teste confirma que ocorreu rotação, mas o IP não mudou em todas as solicitações.

Se as solicitações relacionadas precisarem de permanecer no mesmo IP, utilize, em vez disso, uma sessão fixa:

proxy_url = (
    "http://USERNAME-session-blogtest01-lifetime-10:"
    "PASSWORD@proxy.geonode.io:10000"
)

Fizemos três solicitações utilizando a mesma sessão:

Request 1: 177.73.202.78
Request 2: 177.73.202.78
Request 3: 177.73.202.78

Same IP: Yes

Todas as três solicitações utilizaram o mesmo IP no nosso teste.

Consulte os guias do Geonode

sobre proxies rotativos e sessões fixas para conhecer as configurações disponíveis.

Erros comuns de proxy no Scrapy e como resolvê-los

Se o proxy não estiver a funcionar, comece por verificar os detalhes da ligação. Verifique o nome de utilizador e a palavra-passe e, em seguida, o host, a porta e o protocolo. O erro apresentado pelo Scrapy pode, normalmente, ajudar a identificar a origem do problema.

407 Autenticação de proxy necessária

Um código de erro 407 indica normalmente um problema de autenticação.

Quando testámos o Scrapy com credenciais incorretas, o proxy devolveu:

HTTP status: 407
Authentication error. Please check your authentication settings.

Verifique primeiro o nome de utilizador e a palavra-passe. Se estiverem corretos, certifique-se de que o Scrapy recebe o URL completo do proxy, incluindo o esquema, as credenciais, o host e a porta.

ERR_TUNNEL_CONNECTION_FAILED / ligação recusada

Um erro de ligação significa, normalmente, que o Scrapy não conseguiu aceder ao proxy.

Verifique primeiro o host e a porta. Em seguida, certifique-se de que o protocolo corresponde ao do servidor proxy que está a ser utilizado.

O Scrapy não devolve necessariamente o ERR_TUNNEL_CONNECTION_FAILED, ao estilo do navegador. No nosso teste de ligação falhada, o Scrapy repetiu a tentativa de pedido e acabou por devolver DownloadFailedError, contendo um erro ConnectionLost do Twisted.

Tempos de espera e respostas vazias

Um tempo de espera significa que o pedido não recebeu uma resposta dentro do tempo configurado.

Em primeiro lugar, verifique se o URL de destino funciona e se o proxy consegue estabelecer ligação. Se ambos estiverem a funcionar, verifique a configuração do tempo de espera no Scrapy.

Para o nosso teste de falha de ligação, utilizámos uma porta de proxy inválida com DOWNLOAD_TIMEOUT=5

. Após as tentativas de repetição, o Scrapy devolveu:

DownloadFailedError(
  ConnectionLost:
  Connection to the other side was lost in a non-clean fashion.
)

Assim, uma ligação de proxy falhada pode aparecer como um erro de ligação, em vez de uma simples mensagem de tempo limite.

Um erro específico do Scrapy

Um erro comum específico do Scrapy é passar um valor incompleto para ``request.meta["proxy"]`

`.

No nosso teste, utilizámos:

proxy.geonode.io:9000

sem o esquema nem as credenciais. O pedido devolveu um código de erro HTTP 407.

A solução consistiu em passar o URL completo do proxy:

http://USERNAME:PASSWORD@proxy.geonode.io:9000

ou deixar que o middleware do downloader o construísse a partir das variáveis de ambiente.

Scrapy + Geonode: o que obtém

O Scrapy gere os pedidos ou as ligações na aplicação. O Geonode gere a ligação ao proxy.

Pode escolher proxies residenciais, de ISP ou de centro de dados consoante a tarefa e, em seguida, utilizar rotação, sessões fixas e segmentação geográfica sempre que necessário. Isto mantém a configuração do proxy separada do resto do código da aplicação.

Os planos variam consoante o tipo de proxy, com algumas opções com preços por GB.

Perguntas frequentes

O Scrapy suporta proxies do tipo «SOCKS5»?

O SOCKS5 requer uma configuração adicional na versão do Scrapy que testámos.

A tentativa de passar um proxy do tipo «socks5://» através do gestor HTTP predefinido do Scrapy falhou com a mensagem:

UnsupportedURLSchemeError("Unsupported scheme: b'socks5'")

Em seguida, instalámos httpx2[socks] e configurámos o HttpxDownloadHandler experimental do Scrapy. Com o proxy rotativo SOCKS5 na porta 11000, o pedido foi bem-sucedido com um código de estado HTTP 200 e devolveu um IP de proxy. O manipulador é experimental, pelo que se adequa melhor a testes do que a uma recomendação para produção.

É possível alternar os endereços IP por pedido no Scrapy?

Sim, o Scrapy pode enviar pedidos através de um proxy rotativo, mas não é garantido que cada pedido utilize um endereço IP diferente.

O nosso teste de cinco pedidos resultou em dois endereços IP únicos. Os três primeiros pedidos partilharam um endereço IP, enquanto os dois últimos partilharam outro, confirmando que a rotação ocorreu durante o teste.

Existe um período de teste gratuito?

Sim. O Geonode oferece um período de teste gratuito, pelo que o proxy pode ser testado com o Scrapy antes de se passar para um plano pago. Consulte o período de teste gratuito atual e os planos.

Onde devo configurar o proxy no Scrapy?

Para um pedido individual, passe o proxy através de request.meta["proxy"].

Se for necessária a mesma configuração de proxy para vários pedidos, o middleware «downloader» mantém a lógica do proxy num único local. No nosso teste, o middleware personalizado definiu request.meta["proxy"] antes de o HttpProxyMiddleware integrado no Scrapy processar o pedido.

Por que é que a minha spider do Scrapy é executada, mas não envia nenhuma solicitação?

Verifique como a spider cria as suas primeiras solicitações.

No nosso teste com o Scrapy 2.19, definir apenas o método antigo start_requests()

fez com que o spider fosse iniciado e encerrado sem enviar qualquer pedido. A utilização do método assíncrono start()

resolveu o problema:

async def start(self):
    yield scrapy.Request(...)

Este foi o comportamento registado durante a nossa configuração de teste.