【问题标题】:Unable to use multiple proxies within Scrapy spider无法在 Scrapy spider 中使用多个代理
【发布时间】:2018-10-02 20:51:24
【问题描述】:

我在 python 中使用Scrapy 编写了一个脚本,通过代理向网页发送请求,而不更改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 来达到目的。我希望实现与上面使用单个代理相同的(外部)。谢谢。

【问题讨论】:

    标签: python python-3.x web-scraping scrapy scrapy-spider


    【解决方案1】:

    您还可以将每个请求的元密钥代理设置为 http://some_proxy_server:porthttp://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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2022-10-24
      • 1970-01-01
      • 2016-03-17
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多