python - 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'
我不明白为什么genspider
command 甚至会在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 和设置文件尚未移动。
任何想法是什么原因造成的?
解决方案
当你尝试创建一个新的蜘蛛时,scrapy genspider
会检查一个同名的蜘蛛是否已经存在。
为此,使用了 的实例SpiderLoader
。
SpiderLoader
启动时导入并缓存项目中的所有蜘蛛。
由于其中一个导入导致错误,因此命令失败。
推荐阅读
- mysql - 返回 count() 天匹配 mysql
- css - node.js 不会在所有页面中加载 css 样式
- java - request.getParameter 正在返回 null ,我为此浏览了很多,但我没有得到正确的解决方案
- c++ - 如何仅使用宏生成整数序列?
- opengl - 如何使用 OpenGL 将纹理放在正方形上?
- php - php 脚本有时会收到 post 数据,有时不会。好像是缓存问题
- python-3.x - 为什么我不能导入 pdfplumber
- mysql - 将表值导入mysql
- facebook - Instagram 客户端因违反政策而被禁用,2018 年
- c# - asp.net core - 如何将变量从控制器传递给过滤器