首页 > 解决方案 > Scrapy spider 在同一个项目中显示另一个不相关的spider 的错误

问题描述

我试图通过运行来创建一个新的蜘蛛scrapy genspider -t crawl newspider "example.com"。这是在我最近创建的蜘蛛项目目录 C:\Users\donik\bo_gui\gui_project 中运行的。结果,我收到一条错误消息:

  File "C:\Users\donik\bo_gui\gui_project\gui_project\spiders\requisites.py", line 6, in <module>
    from gui_project.gui_project.updated_kw import translated_kw_dicts
ModuleNotFoundError: No module named 'gui_project.gui_project'

此错误消息指的是我之前在 requisites.py 中创建的另一个蜘蛛,称为

class RequisitesSpider(CrawlSpider):
    name = 'requisites'

我不明白为什么genspidercommand 甚至会在requisites.py 中对这个旧蜘蛛感到困扰,从而拒绝创建一个新蜘蛛。必备项.py 有这些导入语句,当我运行错误所指的蜘蛛时,它们没有显示任何错误,但是当我想创建一个新的蜘蛛时,突然找不到 gui_project.gui_project 模块:

from bs4 import BeautifulSoup
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from langdetect import detect
import re
from gui_project.gui_project.updated_kw import translated_kw_dicts
from urllib.parse import urlparse

如果我注释掉from gui_project.gui_project.updated_kw import translated_kw_dicts并再次运行scrapy genspider -t crawl newspider "example.com",那么我的新蜘蛛就会成功创建。当我尝试在同一个项目中运行第三个蜘蛛时,这同样适用。它也会由于 requisites.py 蜘蛛中的错误而停止,尽管它们没有以任何方式相互连接,并且每个蜘蛛的名称都不同。cfg 和设置文件尚未移动。

任何想法是什么原因造成的?

标签: pythonscrapy

解决方案


当你尝试创建一个新的蜘蛛时,scrapy genspider会检查一个同名的蜘蛛是否已经存在。
为此,使用了 的实例SpiderLoader

SpiderLoader启动时导入并缓存项目中的所有蜘蛛。
由于其中一个导入导致错误,因此命令失败。


推荐阅读