Middleware de proxy do Scrapy: valores de retorno Request e None
Devolva o controlo depois de atribuir um proxy do Scrapy em vez de reprogramar sem querer o mesmo pedido antes de o transferir.
O endereço do proxy muda no registo. O destino nunca aparece no registo de acesso do proxy. Verifique se o seu middleware deixa o pedido chegar ao transferidor.
No middleware do transferidor do Scrapy, devolver um Request significa reprogramar esse pedido. Não significa «continue a enviar este objeto com os metadados que acabei de alterar».
Para um seletor que apenas escolhe uma rota, a forma importante é:
def process_request(self, request):
request.meta['proxy'] = self.choose_proxy()
return None
Este fragmento mostra a forma atual do gancho; utilize a interface de middleware suportada pela versão do Scrapy instalada. O seletor deve devolver um ponto final válido e tratar explicitamente um conjunto indisponível. Um rastreio público que permite intermediários públicos pode obter candidatos HTTP da lista de proxies HTTP para esse valor de retorno.
Devolver None permite que o resto do middleware de pedidos e o transferidor continuem. Devolver outro Request é útil quando substitui ou repete trabalho intencionalmente, mas exige um motivo e uma condição de saída.
Um rotador que devolve o mesmo pedido sempre pode executar repetidamente o seu próprio código de seleção sem nunca estabelecer uma ligação ao destino. Aumentar os tempos limite ou abrir mais portas proxy não consegue reparar esse ciclo de fluxo de controlo.
Examine a entrada no middleware, o comportamento de retorno e a primeira tentativa real de rede como eventos separados. Uma linha de registo que diz «proxy selecionado» prova apenas que o seletor foi executado. Não prova que foi enviado um pedido com o ponto final selecionado.