Python Prapy:TypeError:uu init_uuuuuuuuuuuuuuuuuuu()缺少1个必需的位置参数:';设置';

Python Prapy:TypeError:uu init_uuuuuuuuuuuuuuuuuuu()缺少1个必需的位置参数:';设置';,python,scrapy,Python,Scrapy,我有一个很差劲的中间件: class ProxyMiddleware(object): def __init__(self, settings): self.proxy_file = settings.get('PROXY_FILE') fin = open(self.proxy_file) self.proxy_list = list() for line in fin.readlines(): p

我有一个很差劲的中间件:

class ProxyMiddleware(object):
    def __init__(self, settings):
        self.proxy_file = settings.get('PROXY_FILE')
        fin = open(self.proxy_file)
        self.proxy_list = list()
        for line in fin.readlines():
            parts = line.strip().split()
            proxy = parts[2] + '://' + parts[0] + ':' + parts[1]
            self.proxy_list.append(proxy)

    def process_request(self, request, spider):
        request.meta['proxy'] = random.choice(self.proxy_list)

但是在运行时发生了一个错误,设置是什么?

如果需要一个
settings
对象来初始化中间件,则需要定义一个
from_crawler()
类方法

例如,看一看内置中间件以获得灵感

在您的情况下,它将类似于:

class ProxyMiddleware(object):

    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler.settings)

    def __init__(self, settings):
        self.proxy_file = settings.get('PROXY_FILE')
        fin = open(self.proxy_file)
        self.proxy_list = list()
        for line in fin.readlines():
            parts = line.strip().split()
            proxy = parts[2] + '://' + parts[0] + ':' + parts[1]
            self.proxy_list.append(proxy)

    def process_request(self, request, spider):
        request.meta['proxy'] = random.choice(self.proxy_list)

在何处创建此类的实例?我没有实例化该类错误是什么?TypeError:\uuuuu init\uuuuu()缺少1个必需的位置参数:“设置”
class ProxyMiddleware(object):

    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler.settings)

    def __init__(self, settings):
        self.proxy_file = settings.get('PROXY_FILE')
        fin = open(self.proxy_file)
        self.proxy_list = list()
        for line in fin.readlines():
            parts = line.strip().split()
            proxy = parts[2] + '://' + parts[0] + ':' + parts[1]
            self.proxy_list.append(proxy)

    def process_request(self, request, spider):
        request.meta['proxy'] = random.choice(self.proxy_list)