簡體   English   中英

Scrapy 爬錯蜘蛛

[英]Scrapy crawl wrong spider

scrapy crawl [spider-name] 錯誤中,OP 說

在我的項目的蜘蛛文件夾中,我有兩個蜘蛛,分別命名為蜘蛛 1 和蜘蛛 2……現在當我在我的項目根文件夾中編寫命令 scrapy crawl spider1 時,它調用 spider2.py 而不是 spider1.py。 當我從我的項目中刪除 spider2.py 然后它調用 spider1.py

我經歷過這種完全相同的行為並使用了完全相同的解決方案。 對 OP 的回應都歸結為刪除所有 .pyc 文件。

我已經清理了 Spider1.pyc、spider2.pyc 和 init.pyc。 現在,當我在項目的根目錄中運行 scrapy crawl spider1 時,它實際上運行了 spider2.py 但生成了 spider1.pyc 文件而不是 spider2.pyc

我也看到了這種行為。

但是文檔沒有說明所有這些問題和解決方法。 https://doc.scrapy.org/en/latest/intro/tutorial.html

“name:標識Spider。它在一個項目中必須是唯一的,即不能為不同的Spider設置相同的名稱。”

https://doc.scrapy.org/en/1.0/topics/spiders.html#scrapy.spiders.Spider “名稱:定義此蜘蛛名稱的字符串。蜘蛛名稱是蜘蛛的位置(並實例化) ) 由 Scrapy 提供,因此它必須是唯一的。但是,沒有什么可以阻止您實例化同一個蜘蛛的多個實例。這是最重要的蜘蛛屬性,並且是必需的。”

這是有道理的,所以 Scrapy 知道要運行哪個蜘蛛,但它不起作用,那么缺少什么? 謝謝。

編輯好的,它又發生了。 這是我的回溯:

(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 中。

默認設置不變。 文檔還說“命令行提供的參數是最優先的參數,覆蓋任何其他選項。您可以使用 -s(或 --set)命令行選項明確覆蓋一個(或多個)設置。” https://doc.scrapy.org/en/latest/topics/settings.html#topics-settings

我在回溯中看到一行是對frozencopy的引用。 文檔討論了使用它使設置不可變。 https://doc.scrapy.org/en/latest/topics/api.html 我不知道它的用例是什么,但我沒有選擇它,我不知道如何取消選擇它,如果這是問題所在。

即使您沒有運行該蜘蛛,您的蜘蛛也不會出現語法錯誤。 我假設scrapy 編譯你所有的蜘蛛,即使你只想運行其中之一。 僅僅因為它在您的其他蜘蛛中捕獲錯誤並不意味着它沒有運行您調用的蜘蛛。 我有過類似的經歷,scrapy 在我目前沒有嘗試運行的蜘蛛中捕獲錯誤,但它最終仍然運行我想要的蜘蛛。 修復您的語法錯誤並嘗試使用不同的方式來驗證您的蜘蛛是否運行了這樣的打印或收集了與其他蜘蛛不同的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM