Scrapy выбрасывает TWISTED Unhandled error в Deferred, когда паук использует proxymiddleware
Я использую ProxyMiddleware в scrapy, и его выдача не прослеживается ошибка. Вот обратная связь:
Необработанная ошибка в отложенном:
[витая] КРИТИЧЕСКАЯ: необработанная ошибка в отложенном:
[витая] КРИТИЧЕСКАЯ:
Traceback (последний вызов был последним):
Файл "/usr/local/lib/python3.5/dist-packages/twisted/internet/defer.py", строка 1418, в _inlineCallbacks result = g.send(result)
Файл "/usr/local/lib/python3.5/dist-packages/scrapy/crawler.py", строка 80, в обходе
self.engine = self._create_engine()
Файл "/usr/local/lib/python3.5/dist-packages/scrapy/crawler.py", строка 105, в _create_engine
return ExecutionEngine (self, lambda _: self.stop ())
Файл "/usr/local/lib/python3.5/dist-packages/scrapy/core/engine.py", строка 69, в init
self.downloader = downloader_cls (сканер)
Файл "/usr/local/lib/python3.5/dist-packages/scrapy/core/downloader/init.py", строка 88, в init
self.middleware = DownloaderMiddlewareManager.from_crawler (crawler)
Файл "/usr/local/lib/python3.5/dist-packages/scrapy/middleware.py", строка 58, в from_crawler возвращает cls.from_settings(crawler.settings, crawler)
Файл "/usr/local/lib/python3.5/dist-packages/scrapy/middleware.py", строка 40, из from_settings mw = mwcls()
Ошибка типа: init() отсутствует 1 обязательный позиционный аргумент: 'arg'
Вот файлы:
settings.py
HTTP_PROXY = 'http://127.0.0.1:8123'
DOWNLOADER_MIDDLEWARES = {
#Tor Middleware
'RaidForums.middlewares.ProxyMiddleware': 400
}
SPIDER_MIDDLEWARES = {
'RaidForums.middlewares.ProxyMiddleware': 400
}
middelwares.py
class ProxyMiddleware(object):
def process_request(self, request, spider):
request.meta['proxy'] = settings['HTTP_PROXY']
def __init__(self, arg):
super(ProxyMiddleware, self).__init__()
self.arg = arg
1 ответ
В вашем settings.py включите scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware
с более высоким значением приоритета, чем ваш пользовательский (401 или выше), так что он дальше от движка, чем ваше пользовательское промежуточное ПО.
В вашем middlewares.py вы можете получить доступ к настройкам с помощью spider.settings[]
, просто settings[]
не сработает Я также думаю, что вы можете взять __init__()
из вашего ProxyMiddleware в целом.
Посмотрите этот пример из scrapinghub, чтобы понять, насколько вы близки.