在scrapy crawl [spider-name] fault中,OP说
在我的项目的spider文件夹中,我有两个蜘蛛名为spider1和 spider2 ....现在我在我的root中写命令scrapy crawl spider1 项目文件夹它调用spider2.py而不是spider1.py。什么时候我会 从我的项目中删除spider2.py然后它调用spider1.py
我遇到过这种完全相同的行为,并使用了完全相同的解决方案。对OP的响应都归结为删除所有.pyc文件。
我已经清理了spider1.pyc,spider2.pyc和init.pyc。现在,当我跑 scrapy爬行spider1在我实际运行的项目的根flder中 spider2.py但是生成了spider1.pyc文件而不是spider2.pyc
我也看到了这种行为。
但是文档并没有对所有这些问题和解决方法说些什么。 https://doc.scrapy.org/en/latest/intro/tutorial.html
" name:标识蜘蛛。它在项目中必须是唯一的,也就是说,您不能为不同的Spiders设置相同的名称。"
https://doc.scrapy.org/en/1.0/topics/spiders.html#scrapy.spiders.Spider "名称: 一个字符串,用于定义此蜘蛛的名称。蜘蛛名称是Scrapy如何定位(并实例化)蜘蛛,因此它必须是唯一的。但是,没有什么可以阻止您实例化同一个蜘蛛的多个实例。这是最重要的蜘蛛属性,它是必需的。"
这是有道理的,所以Scrapy知道要运行哪个蜘蛛,但它不起作用,那么缺少什么?感谢。
EDIT 好的,所以它又发生了。这是我的追溯:
(aishah) malikarumi@Tetuoan2:~/Projects/aishah/acquire$ scrapy crawl crawl_h4
Traceback (most recent call last):
File "/home/malikarumi/Projects/aishah/bin/scrapy", line 11, in <module>
sys.exit(execute())
File "/home/malikarumi/Projects/aishah/lib/python3.5/site-packages/scrapy /cmdline.py", line 141, in execute
cmd.crawler_process = CrawlerProcess(settings)
File "/home/malikarumi/Projects/aishah/lib/python3.5/site-packages/scrapy/crawler.py", line 238, in __init__
super(CrawlerProcess, self).__init__(settings)
File "/home/malikarumi/Projects/aishah/lib/python3.5/site-packages/scrapy/crawler.py", line 129, in __init__
self.spider_loader = _get_spider_loader(settings)
File "/home/malikarumi/Projects/aishah/lib/python3.5/site-packages/scrapy/crawler.py", line 325, in _get_spider_loader
return loader_cls.from_settings(settings.frozencopy())
File "/home/malikarumi/Projects/aishah/lib/python3.5/site-packages/scrapy/spiderloader.py", line 33, in from_settings
return cls(settings)
File "/home/malikarumi/Projects/aishah/lib/python3.5/site-packages/scrapy/spiderloader.py", line 20, in __init__
self._load_all_spiders()
File "/home/malikarumi/Projects/aishah/lib/python3.5/site-packages/scrapy/spiderloader.py", line 28, in _load_all_spiders
for module in walk_modules(name):
File "/home/malikarumi/Projects/aishah/lib/python3.5/site-packages/scrapy/utils/misc.py", line 71, in walk_modules
submod = import_module(fullpath)
File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 661, in exec_module
File "<frozen importlib._bootstrap_external>", line 767, in get_code
File "<frozen importlib._bootstrap_external>", line 727, in source_to_code
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "/home/malikarumi/Projects/aishah/acquire/acquire/spiders/crawl_h3.py",
line 19 (follow=True, callback='parse_item'),))
^
SyntaxError: invalid syntax`
请注意:我打电话给crawl_h4。我抓到了crawl_h3。我按原样离开了crawl_h3,包括语法错误,所以在重构时我会有比较的东西。此语法错误不在crawl_h4中。
默认设置不变。文档还说&#34;命令行提供的参数是最优先的参数,覆盖任何其他选项。您可以使用-s(或--set)命令行选项显式覆盖一个(或多个)设置。&#34; https://doc.scrapy.org/en/latest/topics/settings.html#topics-settings
我在追溯中看到了一条对icecopy的引用。文档讨论使用它来使设置不可变。 https://doc.scrapy.org/en/latest/topics/api.html。我不知道具体用例是什么,但我没有选择它,我不确定如何解决它,如果这是问题。
答案 0 :(得分:2)
即使您没有运行该蜘蛛,您的蜘蛛也不会出现语法错误。我假设scrapy编译所有你的蜘蛛,即使你只想运行其中一个。仅仅因为它捕捉到其他蜘蛛的错误并不意味着它没有运行你所调用的蜘蛛。我有过类似的经历,scrapy捕获我目前没有尝试运行的蜘蛛的错误但是,它仍然运行我最终想要的蜘蛛。修复语法错误并尝试使用其他方法验证您的蜘蛛是否运行了这样的打印或收集与其他蜘蛛不同的数据。