【问题标题】:Scrapy always running same command from command promptScrapy 总是从命令提示符运行相同的命令
【发布时间】:2025-11-27 14:00:01
【问题描述】:

我正在尝试在 Windows 10 上的 BashOnUbunty 上学习 Scrapy。我使用 genspider 命令创建了一个蜘蛛(yelprest),然后通过创建蜘蛛文件直接创建了另一个蜘蛛(quotes_spider)(遵循官方教程https://doc.scrapy.org/en/latest/intro/tutorial.html )。

第一个蜘蛛尚未测试,但我尝试使用第二个蜘蛛完成教程,当我尝试运行时,我收到指向第一个蜘蛛的错误。另外,当我尝试运行任何其他像版本这样的scrapy命令时,我得到了与上面相同的错误。以下是错误:

(BashEnv) root > scrapy version
Traceback (most recent call last):
  File "/mnt/s/BashEnv/bin/scrapy", line 11, in <module>
    sys.exit(execute())
  File "/mnt/s/BashEnv/local/lib/python2.7/site-packages/scrapy/cmdline.py", line 148, in execute
    cmd.crawler_process = CrawlerProcess(settings)
  File "/mnt/s/BashEnv/local/lib/python2.7/site-packages/scrapy/crawler.py", line 243, in __init__
    super(CrawlerProcess, self).__init__(settings)
  File "/mnt/s/BashEnv/local/lib/python2.7/site-packages/scrapy/crawler.py", line 134, in __init__
    self.spider_loader = _get_spider_loader(settings)
  File "/mnt/s/BashEnv/local/lib/python2.7/site-packages/scrapy/crawler.py", line 330, in _get_spider_loader
    return loader_cls.from_settings(settings.frozencopy())
  File "/mnt/s/BashEnv/local/lib/python2.7/site-packages/scrapy/spiderloader.py", line 61, in from_settings
    return cls(settings)
  File "/mnt/s/BashEnv/local/lib/python2.7/site-packages/scrapy/spiderloader.py", line 25, in __init__
    self._load_all_spiders()
  File "/mnt/s/BashEnv/local/lib/python2.7/site-packages/scrapy/spiderloader.py", line 47, in _load_all_spiders
    for module in walk_modules(name):
  File "/mnt/s/BashEnv/local/lib/python2.7/site-packages/scrapy/utils/misc.py", line 71, in walk_modules
    submod = import_module(fullpath)
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/mnt/s/BashEnv/Scrapy/Scrapy/spiders/yelprest.py", line 14
    rules = (
    ^
IndentationError: unexpected indent
(BashEnv) root >

我不明白为什么我给出的任何命令都会出现同样的错误。

【问题讨论】:

  • 它看起来像一个 python 错误。 IndentationError 表示您的 yelprest.py 文件中有问题。您的文件是否正确缩进?你混合了制表符和空格吗?
  • 不,重点是上面是“scrapy version”命令的输出——它完全不相关。对于我给出的任何命令,我都得到了上述结果——我给出的每个命令都指向我用 genspider 命令创建的第一个蜘蛛。我从那个位置移除了那个特定的蜘蛛,我能够正常运行。我从文档/论坛中看到,我应该能够在同一个项目中拥有多个蜘蛛。但我不清楚这种特殊行为。
  • 如果您在项目目录中运行 scrapy 命令,如果您的文件包含错误,它将崩溃。即使命令不相关。这就是为什么我认为错误在 yelprest.py 中。是的,你可以在同一个项目中拥有多个蜘蛛。

标签: scrapy scrapy-spider


【解决方案1】:

yelprest.py 文件中存在一些错误(第 14 行或更早):它不是有效的 Python。修复此错误,一切都会正常进行。确保您的文件正确缩进并且不要混用空格和制表符。

编辑:

要确保该文件中存在错误,只需将其删除即可。如果没有这个文件一切正常,那么错误一定存在!


更新:

您的问题没有明确说明,但根据您的评论,您的问题是“为什么 Scrapy 会为每个命令加载我的蜘蛛代码?”。答案是:因为 Scrapy 就是为此而生的。某些命令只能在项目内部运行,例如checkcrawl。有些命令可以在任何地方运行,例如startproject。但是在 Scrapy 项目中,任何命令都会加载您的所有代码。 Scrapy 就是这样制作的。

例如,我有一个名为crawler 的项目(我知道,非常具有描述性!):

$ cd ~
$ scrapy version
Scrapy 1.4.0
$ cd crawler/
$ scrapy version
2017-10-31 14:47:42 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: crawler)
2017-10-31 14:47:42 [scrapy.utils.log] INFO: Overridden settings: {...}
Scrapy 1.4.0

【讨论】:

  • 它指向一个缩进错误,我已经验证它是正确的。但我的问题是它为什么要执行这个蜘蛛,即使我没有指向它(例如 - 我只是运行了一个版本命令)。
  • 现在说得通了。谢谢 Djunzu!
最近更新 更多