gpt4 book ai didi

python - 无法在 Scrapy 蜘蛛中使用多个代理

转载 作者:太空狗 更新时间:2023-10-29 21:57:49 25 4
gpt4 key购买 nike

我使用 Scrapy 在 python 中编写了一个脚本,通过代理向网页发送请求,而不更改 settings.pyDOWNLOADER_MIDDLEWARES。它现在工作得很好。然而,我唯一不能使用的是创建一个代理列表,这样如果一个失败,另一个将被使用。我如何抽动这部分 os.environ["http_proxy"] = "http://176.58.125.65:80" 以逐个获取代理列表,因为它只支持一个。对此的任何帮助将不胜感激。

这是我到目前为止尝试过的(工作中的一个):

import scrapy, os
from scrapy.crawler import CrawlerProcess

class ProxyCheckerSpider(scrapy.Spider):
name = 'lagado'
start_urls = ['http://www.lagado.com/proxy-test']
os.environ["http_proxy"] = "http://176.58.125.65:80" #can't modify this portion to get list of proxies

def parse(self, response):
stat = response.css(".main-panel p::text").extract()[1:3]
yield {"Proxy-Status":stat}

c = CrawlerProcess({
'USER_AGENT': 'Mozilla/5.0',

})
c.crawl(ProxyCheckerSpider)
c.start()

我不想更改 settings.py 中的任何内容或创建任何自定义 middleware 来达到目的。我希望像上面使用单个代理那样实现相同的(外部)。谢谢。

最佳答案

You can also set the meta key proxy per-request, to a value like http://some_proxy_server:port or http://username:password@some_proxy_server:port.

来自官方文档:https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware

因此您需要编写自己的中间件来执行以下操作:

  1. 捕获失败的响应
  2. 如果由于代理导致响应失败:
    1. 用新代理 ip 替换 request.meta['proxy']
    2. 重新安排请求

或者,您可以查看已经用于解决此问题的 scrapy 扩展包:https://github.com/TeamHG-Memex/scrapy-rotating-proxies

关于python - 无法在 Scrapy 蜘蛛中使用多个代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49970407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com