簡體   English   中英

無法在Scrapy spider中使用多個代理

[英]Unable to use multiple proxies within Scrapy spider

我在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來實現此目的。 我希望通過單個代理實現與上面相同的(外部)。 謝謝。

您還可以將每個請求的元鍵代理設置為類似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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM