Scrapy TypeError:此构造函数不接受参数

2024-10-02 12:38:06 发布

您现在位置:Python中文网/ 问答频道 /正文

当我尝试运行我的scrapy程序时,我不断得到以下错误:TypeError:这个构造函数不带参数。我四处寻找,但找不到任何有助于解决问题的东西。我不知道我是否只是有一个错字,我是失踪或类似的东西,但任何帮助将不胜感激。所附代码是中间件.py给出错误,不是整个文件。你知道吗

# middlewares.py
import random
from copy import copy

class ProfileMiddleware:

    @classmethod
    def from_crawler(cls, crawler, *args, **kwargs):
        mw = cls(crawler, *args, **kwargs)
        crawler.signals.connect(mw.spider_opened, signal=signals.spider_opened)
        mw.settings = crawler.settings
        return mw

    def spider_opened(self, spider, **kwargs):
        proxies = self.settings.getlist('PROXIES')
        user_agents = self.settings.getlist('USER_AGENTS')
        self.profiles = list(zip(proxies, user_agents))
        self.queue = copy(self.profiles)
        random.shuffle(self.queue)

    def process_request(self, request, spider):
        if not self.queue:
            self.queue = copy(self.profiles)
            random.shuffle(self.queue)

        profile = self.queue.pop()
        request.headers['User-Agent'] = profile[1]
        request.meta['proxy'] = profile[0]

错误代码:

2019-05-23 10:10:51 [twisted] CRITICAL: Unhandled error in Deferred:

Traceback (most recent call last):
  File "/home/trno224/.local/lib/python2.7/site-packages/scrapy/crawler.py", line 172, in crawl
    return self._crawl(crawler, *args, **kwargs)
  File "/home/trno224/.local/lib/python2.7/site-packages/scrapy/crawler.py", line 176, in _crawl
    d = crawler.crawl(*args, **kwargs)
  File "/home/trno224/.local/lib/python2.7/site-packages/twisted/internet/defer.py", line 1613, in unwindGenerator
    return _cancellableInlineCallbacks(gen)
  File "/home/trno224/.local/lib/python2.7/site-packages/twisted/internet/defer.py", line 1529, in _cancellableInlineCallbacks
    _inlineCallbacks(None, g, status)
--- <exception caught here> ---
  File "/home/trno224/.local/lib/python2.7/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks
    result = g.send(result)
  File "/home/trno224/.local/lib/python2.7/site-packages/scrapy/crawler.py", line 98, in crawl
    six.reraise(*exc_info)
  File "/home/trno224/.local/lib/python2.7/site-packages/scrapy/crawler.py", line 80, in crawl
    self.engine = self._create_engine()
  File "/home/trno224/.local/lib/python2.7/site-packages/scrapy/crawler.py", line 105, in _create_engine
    return ExecutionEngine(self, lambda _: self.stop())
  File "/home/trno224/.local/lib/python2.7/site-packages/scrapy/core/engine.py", line 69, in __init__
    self.downloader = downloader_cls(crawler)
  File "/home/trno224/.local/lib/python2.7/site-packages/scrapy/core/downloader/__init__.py", line 88, in __init__
    self.middleware = DownloaderMiddlewareManager.from_crawler(crawler)
  File "/home/trno224/.local/lib/python2.7/site-packages/scrapy/middleware.py", line 53, in from_crawler
    return cls.from_settings(crawler.settings, crawler)
  File "/home/trno224/.local/lib/python2.7/site-packages/scrapy/middleware.py", line 35, in from_settings
    mw = create_instance(mwcls, settings, crawler)
  File "/home/trno224/.local/lib/python2.7/site-packages/scrapy/utils/misc.py", line 140, in create_instance
    return objcls.from_crawler(crawler, *args, **kwargs)
  File "/home/trno224/scrapy_splash/scrapy_javascript/scrapy_javascript/middlewares.py", line 109, in from_crawler
    mw = cls(crawler, *args, **kwargs)
exceptions.TypeError: this constructor takes no arguments

2019-05-23 10:10:51 [twisted] CRITICAL: 
Traceback (most recent call last):
  File "/home/trno224/.local/lib/python2.7/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks
    result = g.send(result)
  File "/home/trno224/.local/lib/python2.7/site-packages/scrapy/crawler.py", line 98, in crawl
    six.reraise(*exc_info)
  File "/home/trno224/.local/lib/python2.7/site-packages/scrapy/crawler.py", line 80, in crawl
    self.engine = self._create_engine()
  File "/home/trno224/.local/lib/python2.7/site-packages/scrapy/crawler.py", line 105, in _create_engine
    return ExecutionEngine(self, lambda _: self.stop())
  File "/home/trno224/.local/lib/python2.7/site-packages/scrapy/core/engine.py", line 69, in __init__
    self.downloader = downloader_cls(crawler)
  File "/home/trno224/.local/lib/python2.7/site-packages/scrapy/core/downloader/__init__.py", line 88, in __init__
    self.middleware = DownloaderMiddlewareManager.from_crawler(crawler)
  File "/home/trno224/.local/lib/python2.7/site-packages/scrapy/middleware.py", line 53, in from_crawler
    return cls.from_settings(crawler.settings, crawler)
  File "/home/trno224/.local/lib/python2.7/site-packages/scrapy/middleware.py", line 35, in from_settings
    mw = create_instance(mwcls, settings, crawler)
  File "/home/trno224/.local/lib/python2.7/site-packages/scrapy/utils/misc.py", line 140, in create_instance
    return objcls.from_crawler(crawler, *args, **kwargs)
  File "/home/trno224/scrapy_splash/scrapy_javascript/scrapy_javascript/middlewares.py", line 109, in from_crawler
    mw = cls(crawler, *args, **kwargs)
TypeError: this constructor takes no arguments

Tags: infrompyselfhomesettingslibpackages
1条回答
网友
1楼 · 发布于 2024-10-02 12:38:06

替换:

mw = cls(crawler, *args, **kwargs)

使用:

mw = cls(*args, **kwargs)

或:

mw = cls()

cls()调用正在调用类的构造函数(__init__()方法)。因为您的类没有构造函数,所以使用默认构造函数,不需要参数。你知道吗

相关问题 更多 >

    热门问题