我试图通过运行scrapy genspider -t crawl newspider "example.com"
来创建一个新的spider。这是在我最近创建的spider项目目录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'
此错误消息指的是我以前在www.example.com中创建的另一个名requisites.py为
class RequisitesSpider(CrawlSpider):
name = 'requisites'
我不明白为什么genspider
命令在www.example.com中会被这个旧的spider困扰requisites.py,从而拒绝创建新的spider。requisites.py有这样的import语句,当我运行错误所指向的spider时,这些语句没有显示任何错误,但是当我想创建一个新的spider时,突然找不到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"
,那么我的新spider就成功创建了。当我试图在同一个项目中运行第三个spider时,情况也是如此。它也会因为www.example.com spider中的错误而停止requisites.py,尽管它们没有以任何方式互连,并且每个spider的名称都不相同。cfg和设置文件没有被移动。
知道是什么导致的吗?
2条答案
按热度按时间2admgd591#
当您尝试创建一个新的spider时,
scrapy genspider
将检查是否已经存在具有该名称的spider。为此,使用了
SpiderLoader
的示例。SpiderLoader
在启动时导入并缓存项目中的所有spider。由于其中一个导入会导致错误,因此该命令将失败。
3xiyfsfu2#
我也遇到过这种情况,首先,我使用pycahrm,我们知道,pycharm项目有两层,如下图所示。
click here to see it为了方便我们一般把工程的内层设为Source Root,Pycharm可以识别,但是命令行不能识别,所以我们需要这样做,动态修改系统路径,让命令行知道我们有里面那层的工程作为home目录