2016-08-17 9 views
0

The scrapy documentationは具体的には、Webページを実際に取得せずにスパイダーに応答を渡したい場合は、ダウンローダーミドルウェアを使用する必要があることを述べています。しかし、この機能を実現するためのドキュメントや例は見つかりません。Webページを取得せずにスパイダーに応答を渡すにはどうすればいいですか?

リクエストコールバックにURLだけを渡し、アイテムのfile_urlsフィールドにurl(およびその特定の順列)を入力し、実際のダウンロードを処理するためにFilesPipelineを使用したいと考えています。

ウェブページのダウンロードを避けながら、URLをスパイダーに渡すダウンローダーミドルウェアクラスを作成するにはどうすればよいですか?

答えて

1

Responseオブジェクトをダウンローダーミドルウェアのprocess_request()メソッドに戻すことができます。このメソッドは、あなたのクモがもたらすすべての要求に対して呼び出されます。

ような何か:

class NoDownloadMiddleware(object): 
    def process_request(self, request, spider): 
     # only process marked requests 
     if not request.meta.get('only_download'): 
      return 
     # now make Response object however you wish 
     response = Response(request.url) 
     return response 

とあなたのクモで:

def parse(self, response): 
    yield Request(some_url, meta={'only_download':True}) 

とあなたのsettings.pyでミドルウェアを有効:

DOWNLOADER_MIDDLEWARES = { 
    'myproject.middlewares.NoDownloadMiddleware': 543, 
} 
関連する問題