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, чтобы понять, насколько вы близки.

Другие вопросы по тегам