You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python爬虫类初始化报错:定义__init__传参却提示不接受参数

解决Crawler类实例化参数报错问题

我来帮你排查这个问题!你遇到的class takes no argument, 3 given报错,核心原因是你的Crawler类的__init__方法没有被Python正确识别为类的成员方法,最常见的诱因就是缩进错误,另外你的代码还有几个潜在问题可以一并修复:

1. 直接解决报错:检查缩进规范

Python对缩进极度敏感,如果__init__方法的缩进层级不对,或者混合使用了空格和制表符,Python会把它当成全局函数而非类的成员,导致类没有可接收参数的构造方法。

  • 打开PyCharm的空格显示功能:File → Settings → Editor → General → Appearance,勾选Show whitespaces,这样能直观看到缩进是否统一。
  • 确保__init__方法的缩进和类内其他成员(比如project_name等类变量)保持一致,统一使用4个空格(不要用制表符)。你的代码里__init__的缩进看起来是对的,但一定要确认没有混合缩进的情况。

2. 修复类变量/实例变量的设计问题

你当前在__init__里修改的是类级别变量(比如Crawler.project_name),这意味着所有Crawler实例会共享这些值,这通常不是爬虫类的合理设计(如果后续创建多个爬虫实例,会互相覆盖数据)。建议改成实例变量:

class Crawler:
    # 如果不需要类共享的变量,可以移除这些定义,或保留作为默认值
    def __init__(self, project_name, home_url, site_domain):
        # 使用self.xxx定义实例专属变量
        self.project_name = project_name
        self.home_url = home_url
        self.site_domain = site_domain
        self.file_queue = f"{self.project_name}/links_on_queue.txt"
        self.file_crawled = f"{self.project_name}/links_crawled.txt"
        self.starter(self.site_domain)
        self.crawl_page('first_crawler', self.home_url)
    
    # 必须补充定义starter和crawl_page方法,否则实例化时会报错
    def starter(self, domain):
        # 在这里实现starter的逻辑
        pass

    def crawl_page(self, crawler_name, url):
        # 在这里实现crawl_page的逻辑
        pass

3. 验证其他潜在问题

  • 确保starter和crawl_page方法已经在Crawler类中定义:你在__init__里调用了这两个方法,如果它们不存在,修复缩进后会触发新的报错,所以一定要补充实现这两个方法。
  • 检查crawler.py文件是否有其他语法错误:比如未闭合的引号、括号,这些也可能导致Python无法正确解析类结构。

按照上面的步骤调整后,再运行main.py的实例化代码,应该就能解决参数报错问题了。

内容的提问来源于stack exchange,提问作者pastasauce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 14:42:28