Scrapy:如何编写HttpProxyMiddleware?

时间:2017-09-03 04:04:52

标签: scrapy

Scrapy的文档说HttpProxyMiddleware是这样的:

  

此中间件通过为proxy个对象设置proxy元值来设置要用于请求的HTTP Request

     

与Python标准库模块urlliburllib2一样,它遵循以下环境变量:

http_proxy
https_proxy
no_proxy
     

您还可以将每个请求的元键代理设置为http://some_proxy_server:porthttp://username:password@some_proxy_server:port之类的值。请记住,此值将优先于http_proxy/https_proxy个环境变量,并且还会忽略no_proxy环境变量。

文档:https://doc.scrapy.org/en/latest/topics/downloader-middleware.html?highlight=Proxy#module-scrapy.downloadermiddlewares.httpproxy

但是文档中没有例子 我不知道怎么写HttpProxyMiddleware 有什么建议吗?

2 个答案:

答案 0 :(得分:2)

你不需要写一个。 HttpProxyMiddleware 已存在于Scrapy中。

正如文档所述,有两种方法让Scrapy知道您需要通过代理请求:

  1. 设置环境变量 (例如从命令行)

    export http_proxy="http://username:password@host:port"
    
  2. 您还可以将每个请求的元键"代理" 设置为http://some_proxy_server:porthttp://username:password@some_proxy_server:port之类的值。

      

    请注意,此值将优先于 http_proxy / https_proxy 环境变量,并且还会忽略 no_proxy 环境变量

    e.g。

    yield Request("http://google.com", meta={'proxy':'http://username:password@some_proxy_server:port'}, callback=self.some_method)
    

答案 1 :(得分:2)

settings.py中,只需执行此操作。

DOWNLOADER_MIDDLEWARES = {
     'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 100
}

然后在yield每个请求时执行此操作

yield Request(meta={'proxy': "http://%s"%(random.choice(["IP:PORT", "IP:PORT"]))})

就是这样!