2017-12-25 23 views
2

enter image description hereクモの巣オブジェクトとパイプラインオブジェクトの関係は何ですか?

私は治療に取り組んでいます。含ま

class DynamicSQLlitePipeline(object): 

    @classmethod 
    def from_crawler(cls, crawler): 
     # Here, you get whatever value was passed through the "table" parameter 
     table = getattr(crawler.spider, "table") 
     return cls(table) 

    def __init__(self,table): 
     try: 
      db_path = "sqlite:///"+settings.SETTINGS_PATH+"\\data.db" 
      db = dataset.connect(db_path) 
      table_name = table[0:3] # FIRST 3 LETTERS 
      self.my_table = db[table_name] 

私はhttps://doc.scrapy.org/en/latest/topics/api.html#crawler-apiを通読してきた、::

Scrapy APIへのメインエントリポイントがfrom_crawlerを通じて拡張に渡されたクローラオブジェクトであり、私はで始まるpipielineを持っていますクラスメソッド。このオブジェクトはすべてのScrapyコアコンポーネントへのアクセスを提供し、拡張機能がそれらにアクセスして機能をScrapyに引き込む唯一の方法です。

ただし、from_crawlerメソッドとクローラオブジェクトはまだ分かりません。クモの巣オブジェクトとパイプラインオブジェクトの関係は何ですか?どのようにクローラがインスタンス化されますか?スパイダーはクローラのサブクラスですか?私はPassing scrapy instance (not class) attribute to pipelineと尋ねましたが、どのように一緒にフィットするのか分かりません。

+0

[scrapyのアーキテクチャ](https://doc.scrapy.org/en/latest/topics/architecture.html) – furas

+0

ありがとうございますが、クローラはその図にありません。 – user61629

+0

私が正しく理解していれば、 'クローラー'は画像を取得するためにエンジンを実行するオブジェクトです - URLを取得し、サーバーからデータを読み取り、データを解析するために 'spider'を使用し、パイプラインとミドルウェアを使用してデータを変更し、ファイルへの書き込み。 – furas

答えて

2

Crawlerは実際にはScrapyのアーキテクチャで最も重要なオブジェクトの1つです。それは一緒に「接着剤」は、他の作品の多くをクロール実行ロジックの中央部分です:

Scrapy APIへのメインエントリポイントがfrom_crawlerクラスのメソッドを介して 拡張子に渡さCrawlerオブジェクトであり、 。このオブジェクトはすべてのScrapyコアコンポーネントに アクセス権を提供し、 拡張機能がそれらの機能にアクセスし、それらの機能をScrapyに引き込む唯一の方法です。

クローラまたは複数のクローラをCrawlerRunner又はCrawlerProcessインスタンスによって制御されます。

多くのScrapyコンポーネントで利用できるfrom_crawlerメソッドは、これらのコンポーネントがこの特定のコンポーネントを実行しているcrawlerインスタンスにアクセスするための単なる方法です。

また、Crawler, CrawlerRunner and CrawlerProcess actual implementationsをご覧ください。

そして、Scrapyが内部的にどのように動作するかを理解するために私が個人的に知ったことは、スクリプトからスパイダーを実行することでした - check out these detailed step-by-step instructions

+0

スパイダーとパイプラインは「治療コンポーネント」に含まれていますか? – user61629

+0

@ user61629ええ、私は大まかに「コンポーネント」という用語の下にそれらを含めました。 – alecxe

+0

ありがとう、私のフォローアップを見ていただきありがとうございますhttps://stackoverflow.com/questions/47981620/scrapy-dynamically-passing-parameter-from-command-line-to-pipeline – user61629

関連する問題