gpt4 book ai didi

python - Scrapy:类型错误:__init__() 缺少 1 个必需的位置参数: 'settings'

转载 作者:行者123 更新时间:2023-11-30 22:34:14 29 4
gpt4 key购买 nike

我有一个 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():
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() 类方法 otherwise scrapy initializes the middleware without arguments .

查看内置中间件以获取灵感,例如 HttpErrorMiddleware

class HttpErrorMiddleware(object):

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

def __init__(self, settings):
self.handle_httpstatus_all = settings.getbool('HTTPERROR_ALLOW_ALL')
self.handle_httpstatus_list = settings.getlist('HTTPERROR_ALLOWED_CODES')

在你的情况下,它会是这样的:

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)

关于python - Scrapy:类型错误:__init__() 缺少 1 个必需的位置参数: 'settings',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44900254/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com