2016-12-14 5 views
1

私はscrapyプロジェクトの次のディレクトリscrapy昇給の例外の実行プロジェクトディレクトリ

Cの 'チュートリアル' を持つ:\ wamp64 \ WWW \チュートリアル>

プロジェクトのディレクトリ構造を以下に示す。私はカスタムPythonスクリプトがscrapyプロジェクトフォルダなど

内から実行したときにクモが正しく実行さ

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() 

私のカスタムPythonスクリプトrunspiders.pyてクモを実行したい

enter image description here

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

しかしscrapyは、カスタムPythonスクリプトは、プロジェクトフォルダなどの外部から実行し、次の例外を発生させ

C:\ wamp64 \ WWW> Pythonのチュートリアル/ 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クラスやモジュールのように、それらのクラスを見つける場所を知る必要があります。

の中には、少なくとも1つのことを行うscrapy.cfgファイルがあります。これは、フレームワークにプロジェクト設定がどこにあるかを伝えます。チュートリアルプロジェクトの場合は、tutorial.settingsです。

この設定では、ScrapyはSPIDER_MODULESにどのモジュールにスパイダークラスが含まれているかを伝えます。チュートリアルでは、これはtutorial.spidersです。

get_project_settings()は、scrapy.cfgファイルがあるので、設定モジュールを見つけてSPIDER_MODULESを読むために、このすべてを行います。

tutorial/フォルダの外側には、scrapy.cfgがありません。また、あなたのPythonスクリプトはおそらくtutorial.spidersが意味することを知らないでしょう。

まず、をPython pathに追加すると、import tutorial.spidersは何かを意味します。

あなたはScrapyプロジェクトフォルダに入っていないので、get_project_settings()に頼らざるを得ません。ただしを調べるための代替がScrapyプロジェクトを必要としないscrapy runspider /path/to/spider/module.pyを使用することです(あなたがあなたのPythonパスを更新した提供)

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

に変更することができます。

また、configuration optionsscrapy.cfgファイルをシステムの他の場所に置いてください)または約Scrapy project structureを読むこともできます。

関連する問題