1
私はスクラップしたアイテムを持ったファイル.jl
を持っています。私は掻き取りをしていたときには存在しなかったもう一つのパイプラインを持っています。パイプラインだけを実行し、クロール/スクレイプをやり直さずに新しいパイプラインを適用することは可能ですか?Scrapyでクロールすることなくアイテムパイプラインを介して実行することは可能ですか?
私はスクラップしたアイテムを持ったファイル.jl
を持っています。私は掻き取りをしていたときには存在しなかったもう一つのパイプラインを持っています。パイプラインだけを実行し、クロール/スクレイプをやり直さずに新しいパイプラインを適用することは可能ですか?Scrapyでクロールすることなくアイテムパイプラインを介して実行することは可能ですか?
クイックアンサー:はい。
他のコンポーネントの処理中にダウンローダをバイパスするには、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'
を交換してください。
'parse'メソッドが呼び出されていないようです(私は' pdb.set_trace'を追加するだけでなく、内部にいくつかのprint文を入れようとしました)。私は次のように実行しようとしました: 'scrap crawl pipeline_loader -o new_file.jl' – Geo
@Geo Ah申し訳ありません、私は今夜飲酒する必要があります。それは単一のURLの 'start_url'でした。回答が更新されました。 – starrify
素晴らしいです、ありがとうございます! – Geo