2017-09-03 42 views
1

Scrapy的文檔說,大約HttpProxyMiddleware是這樣的:Scrapy:如何編寫HttpProxyMiddleware?

該中間件設置HTTP proxy使用的請求,通過爲Request對象設置proxy元值。

Python標準庫模塊urlliburllib2一樣,它遵循以下環境變量:

http_proxy 
https_proxy 
no_proxy 

您還可以設置每個請求的元關鍵代理,一個值像http://some_proxy_server:porthttp://username:[email protected]_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

settings.py只是這樣做。

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

然後一邊yield荷蘭國際集團的每個請求做

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

這就是它!

+0

假設我已經有5個代理IP地址。我想設置一個IP地址池,我該怎麼辦? – zwl1619

+0

@ zwl1619在您的Spider文件中創建IP列表,並在每個請求中使用一個隨機代理IP ... – Umair

+0

您能告訴我代碼嗎?我不知道如何使它隨機。 – zwl1619

1

你不需要寫一個。 Scrapy中已經存在HttpProxyMiddleware

Google文檔的狀態,也有讓Scrapy知道你需要你的請求通過代理的方式有兩種:

  1. 設置環境變量 (例如,在命令行)

    export http_proxy="http://username:[email protected]:port" 
    
  2. 您還可以將每個請求的元密鑰「代理」設置爲值http://some_proxy_server:porthttp://username:[email protected]_proxy_server:port

    請記住這個值將優先於HTTP_PROXY/https_proxy環境變量,它也將忽略NO_PROXY環境變量

    例如

    yield Request("http://google.com", meta={'proxy':'http://username:[email protected]_proxy_server:port'}, callback=self.some_method) 
    
+0

假設我已經有5個代理IP地址。我想設置一個IP地址池,我該怎麼辦? – zwl1619