2016-12-14 56 views
1

我有一個scrapy項目在以下目錄scrapy引發異常從出方運行項目目錄

C '教程':\ wamp64 \ WWW \教程>

項目的目錄結構在下面給出。

enter image description here

我想通過我的自定義Python腳本運行蜘蛛runspiders.py

from __future__ import print_function 
    import scrapy 
    from scrapy.crawler import CrawlerProcess 
    from scrapy.utils.project import get_project_settings 


    def main(): 
     process = CrawlerProcess(get_project_settings()) 
     process.crawl("quotes") 
     process.start() 

    if __name__ == '__main__' : main() 

蜘蛛正常運行時從scrapy項目文件夾如

內運行自定義Python腳本

C:\ wamp64 \ www \ tutorial> python runspiders.py

但scrapy提高時,從項目文件夾如外運行自定義Python腳本以下異常

C:\ wamp64 \ WWW>蟒蛇教程/ runspiders.py

File "C:\Python27\lib\site-packages\scrapy\spiderloader.py", line 43, in load 
raise KeyError("Spider not found: {}".format(spider_name)) 
KeyError: 'Spider not found: quotes' 

回答

1

Scrapy蜘蛛只是Python類(scrapy.Spider的子類),所以您的腳本需要知道在哪裏找到這些類,就像您在腳本中使用的任何其他Python類或模塊一樣。

在一個Scrapy項目中,你有一個scrapy.cfg文件,它至少做了1件事:它告訴框架在哪裏找到項目設置。對於教程項目,它是tutorial.settings

在這些設置中,Scrapy希望SPIDER_MODULES告訴它哪些模塊包含蜘蛛類。對於本教程,這是tutorial.spiders

在項目中運行腳本時,get_project_settings()會爲您執行所有操作,以發現設置模塊並讀取SPIDER_MODULES,因爲存在scrapy.cfg文件。

tutorial/以外的文件夾,您沒有scrapy.cfg。而你的Python腳本也可能不知道tutorial.spiders意味着什麼。

首先,您可以將/path/to/tutorial/tutorial添加到您的Python path,以便import tutorial.spiders意味着什麼。

但是您也不需要依賴get_project_settings(),因爲您不在Scrapy項目文件夾中。但是你可以改變

process = CrawlerProcess({'SPIDER_MODULES': 'tutorial.spiders'}) 

(前提是你已經更新了你的Python路徑)

另一種尋找到是使用scrapy runspider /path/to/spider/module.py不需要一個Scrapy項目。

您可能還需要閱讀configuration options(其中scrapy.cfg文件位於系統的其他位置)或Scrapy project structure

相關問題