使用Scrapy时,出现“错误:导入错误:找不到testspiders.spiders.followall模块”的问题。

3
我正在尝试从脚本中运行Scrapy,并按照这里的教程进行操作。但遇到了一个错误消息:“Error: ImportError: No module named testspiders.spiders.followall”。我一直在寻找解决方法,但还没有找到匹配的方案。
实际上,我是通过node.js运行这个Python脚本的,它有一个名为python-shell的模块,可以使用以下简单代码来运行Python脚本:
var PythonShell = require('python-shell');

PythonShell.run('my_script.py', function (err) {
  if (err) throw err;
  console.log('finished');
});

实际上,我的代码是从Scrapy网站复制的:

from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy import log, signals
from testspiders.spiders.followall import FollowAllSpider
from scrapy.utils.project import get_project_settings

spider = FollowAllSpider(domain='scrapinghub.com')
settings = get_project_settings()
crawler = Crawler(settings)
crawler.signals.connect(reactor.stop, signal=signals.spider_closed)
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
reactor.run() 

我的目录结构只是在Express框架的基础上添加了python目录和文件,并添加了几行代码来使用python-shell:

-python-node
    -bin
    -node_modules
    -public
    -python 
        -my_script.py
    -routes
    -views
    -app.js
    -package.json 

注意:如果我进入Python目录并运行python my_script.py也不起作用,我会得到相同的错误信息:ImportError: No module named testspiders.spiders.followall


你能展示一下你当前的目录结构吗?谢谢。 - alecxe
在Python shell中,您可以执行import testspidersfrom testspiders import spiders等操作吗? - karthikr
它对那些不起作用,但所有其他的导入都有效。 - maudulus
1个回答

3
当使用scrapy运行爬虫时,爬虫根目录(testspiders/的父目录)会自动添加到路径中。但是,当使用python运行脚本时,情况并非如此。你只有工作目录和PATH和PYTHONPATH中定义的内容。
你可以使用sys.path在python中检查当前路径。
因此,要使python中的导入语句正常工作,你可以:
  • 使用sys.path.append()将testspiders/的父目录添加到路径中(必须在导入testspiders...语句之前执行)
  • 将父目录添加到PYTHONPATH系统变量中
  • 从testspiders/的父目录运行python命令
  • 编辑导入语句(使其按照你的PATH工作)

你能否提供一个如何完成第一个示例的例子? - Ole Henrik Skogstrøm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接