4

別のドメインで Web ページを取得したいということは、「scrapy crawl myspider」コマンドで別のスパイダーを使用する必要があることを意味します。ただし、Web ページのコンテンツが異なるため、データをデータベースに入れるには別のパイプライン ロジックを使用する必要があります。しかし、スパイダーごとに、settings.py で定義されたすべてのパイプラインを通過する必要があります。スパイダーごとに個別のパイプラインを使用する他のエレガントな方法はありますか?

4

3 に答える 3

9

ITEM_PIPELINES設定は、エンジンの始動時にプロジェクト内のすべてのスパイダーに対してグローバルに定義されます。その場でスパイダーごとに変更することはできません。

考慮すべきいくつかのオプションを次に示します。

  • パイプラインのコードを変更します。process_itemパイプラインのメソッドでスパイダーから返されたアイテムの処理をスキップ/続行します。例:

    def process_item(self, item, spider): 
        if spider.name not in ['spider1', 'spider2']: 
            return item  
    
        # process item
    
  • クロールの開始方法を変更します。パラメータとして渡されたスパイダー名に基づいてスクリプトからITEM_PIPELINES実行し、呼び出す前に設定をオーバーライドしますcrawler.configure()

以下も参照してください。

それが役立つことを願っています。

于 2013-06-29T19:05:39.017 に答える