2016-09-18 12 views
1

私はスクラップしたアイテムを持ったファイル.jlを持っています。私は掻き取りをしていたときには存在しなかったもう一つのパイプラインを持っています。パイプラインだけを実行し、クロール/スクレイプをやり直さずに新しいパイプラインを適用することは可能ですか?Scrapyでクロールすることなくアイテムパイプラインを介して実行することは可能ですか?

答えて

3

クイックアンサー:はい。

他のコンポーネントの処理中にダウンローダをバイパスするには、Responseオブジェクトを返すカスタムダウンローダミドルウェアをprocess_requestメソッドで使用できます。詳細を確認してください:http://doc.scrapy.org/en/latest/topics/downloader-middleware.html

あなたの場合、私は個人的には、あなたのローカルファイルシステムから.jlファイルをダウンロードする簡単なコードを使うことができると思います。迅速な(フル)例:

# coding: utf8 

import json 
import scrapy 


class SampleSpider(scrapy.Spider): 

    name = 'sample_spider' 
    start_urls = [ 
     'file:///tmp/some_file.jl', 
    ] 
    custom_settings = { 
     'ITEM_PIPELINES': { 
      'your_pipeline_here': 100, 
     }, 
    } 

    def parse(self, response): 
     for line in response.body.splitlines(): 
      jdata = json.loads(line) 
      yield jdata 

だけで、ファイルへの実際のパスで'/tmp/some_file.jl'を交換してください。

+0

'parse'メソッドが呼び出されていないようです(私は' pdb.set_trace'を追加するだけでなく、内部にいくつかのprint文を入れようとしました)。私は次のように実行しようとしました: 'scrap crawl pipeline_loader -o new_file.jl' – Geo

+0

@Geo Ah申し訳ありません、私は今夜飲酒する必要があります。それは単一のURLの 'start_url'でした。回答が更新されました。 – starrify

+0

素晴らしいです、ありがとうございます! – Geo

関連する問題