process.spider_loader.list()为空列表是什么原因导致的?KeyError: ‘Spider not found

process.spider_loader.list()为空列表是什么原因导致的?

报错

Traceback (most recent call last):
  File "D:\Softwares\Python37\lib\site-packages\scrapy\spiderloader.py", line 75, in load
    return self._spiders[spider_name]
KeyError: 'End_ShangYong'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "D:/Softwares/PyCharm Community Edition 2022.3/plugins/python-ce/helpers/pydev/pydevd.py", line 1496, in _exec
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "D:\Softwares\PyCharm Community Edition 2022.3\plugins\python-ce\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:\Users\Administrator\Desktop\FTX_Spider\FTX_Spider\crawl_a.py", line 153, in <module>
    run("河北省")
  File "C:\Users\Administrator\Desktop\FTX_Spider\FTX_Spider\crawl_a.py", line 130, in run
    process.crawl('End_ShangYong',city1)
  File "D:\Softwares\Python37\lib\site-packages\scrapy\crawler.py", line 219, in crawl
    crawler = self.create_crawler(crawler_or_spidercls)
  File "D:\Softwares\Python37\lib\site-packages\scrapy\crawler.py", line 252, in create_crawler
    return self._create_crawler(crawler_or_spidercls)
  File "D:\Softwares\Python37\lib\site-packages\scrapy\crawler.py", line 327, in _create_crawler
    spidercls = self.spider_loader.load(spidercls)
  File "D:\Softwares\Python37\lib\site-packages\scrapy\spiderloader.py", line 77, in load
    raise KeyError(f"Spider not found: {
      
      spider_name}")
KeyError: 'Spider not found: End_ShangYong'
python-BaseException

在这里插入图片描述

在这里插入图片描述

在 Scrapy 框架中,process.spider_loader.list() 方法返回一个列表,其中包含了 Scrapy 项目中所有可用的 Spider 的名称。

如果该方法返回一个空列表,通常有以下几种可能的原因:

  1. 没有定义 Spider:检查 Scrapy 项目中是否有定义 Spider,或者是否在正确的位置定义了 Spider。
  2. Spider 名称无效:确保 Spider 的名称被正确设置,并使用正确的名称调用 Spider。
  3. 配置不正确:确保 Scrapy 配置文件中正确配置了爬虫的名称和属性。

如果您认为您的 Spider 已经正确的定义和配置,但还是出现了 process.spider_loader.list() 返回空列表的问题,可以考虑检查以下几点:

  1. 项目设置:确保项目的设置正确,特别是 SPIDER_MODULESNEWSPIDER_MODULE 设置。
SPIDER_MODULES = ['XnSpider.spiders']
NEWSPIDER_MODULE = 'XnSpider.spiders'

我这里是这个问题,代码在修改log设置的setting中误触删除掉了。

  1. Spider 命名:确保 Spider 的名称符合 Scrapy 的命名规则,例如名称全局唯一、使用下划线命名、避免与默认方法名称重复。
  2. Spider 文件位置:确保 Spider 文件位于正确的位置,并且没有拼写错误。
  3. 导入错误:检查 Spider 文件的导入,确保导入没有错误。
  4. 日志输出:将日志等级设置为 DEBUG,查看输出是否提供了有关错误的更多详细信息。

如果以上步骤都没有解决问题,可以尝试重新创建 Scrapy 项目,并确保所有依赖项都是最新的。

测试

根据搜索结果,**KeyError: 'Spider not found:**是一个常见的错误,可能有以下原因:

  • 你运行的spider名称和你在spider文件中定义的name属性不一致1。你需要确保两者相同,例如scrapy crawl myspidername = ‘myspider’
  • 你没有在项目目录下运行scrapy命令2 3。你需要切换到包含scrapy.cfg文件的目录下,例如myproject/,然后运行scrapy命令。
  • 你的项目结构不正确3 4。你需要将你的spider文件放在项目目录下的spiders子目录中,例如myproject/spiders/myspider.py,并且确保你的spider类是有效的。

SPIDER_MODULES的settings设置是什么?

SPIDER_MODULES 是 Scrapy 项目的配置之一,它指定 Scrapy 项目中存放 Spider 的模块名称。在 Scrapy 中,Spider 是用来抓取和处理网页的主要组件。

SPIDER_MODULES 配置项通常定义在 Scrapy 项目的 settings.py 文件中,它是一个 Python 列表,列出 Scrapy 项目中包含 Spider 的模块名称,例如:

SPIDER_MODULES = ['myproject.spiders']

上述代码中,SPIDER_MODULES 指定了 Scrapy 项目中存放 Spider 的模块名称为 myproject.spiders,这意味着 Scrapy 会去 myproject 目录下查找名为 spiders 的子目录,以及该子目录下的所有 Python 模块文件作为 Scrapy 项目中可用的 Spider。

如果用户想要将这些 Spider 放在不同的目录中,也可以将多个模块名称添加到 SPIDER_MODULES 列表中,例如:

SPIDER_MODULES = ['myproject.spiders', 'anotherproject.spiders']

上述代码中,SPIDER_MODULES 列表中包含了 myproject.spidersanotherproject.spiders 两个模块名称,这意味着 Scrapy 会在两个目录下查找名为 spiders 的子目录,以及这两个子目录下的所有 Python 模块文件作为 Scrapy 项目中可用的 Spider。

需要注意的是,如果将 Spider 放在非默认目录中,也必须在 settings.py 文件中指定 NEWSPIDER_MODULE 配置项,该配置项指定 Scrapy 项目中新 Spider 的模块名称,例如:

NEWSPIDER_MODULE = 'myproject.newspiders'

上述代码中,NEWSPIDER_MODULE 指定了 Scrapy 项目中新 Spider 的模块名称为 myproject.newspiders,这意味着 Scrapy 项目在创建新的 Spider 时,会在名为 myproject.newspiders 的模块中查找新的 Spider。

猜你喜欢

转载自blog.csdn.net/weixin_45934622/article/details/129885313
今日推荐