0

スパイダーに永続的なリクエスト メタデータを保持する方法はありますか? request.meta次のコールバックまでしか持続しないので、次のようなことをしなければなりません:

def method1(self, response):
    request = Request(url, callback=self.method2)
    request.meta['persist'] = ...

    yield request

def method2(self, response):
    ...

    request = Request(url, callback=self.method3)
    request.meta['persist'] = response.meta['persist']

    yield request

これを行うデコレータも作成しましたが、よりクリーンなソリューションがあることを本当に望んでいます:

def persist_meta(callback):
    def inner(self, *args, **kwargs):
        for result in callback(self, *args, **kwargs):
            if isinstance(result, Request):
                response = args[0]

                persist = response.meta.get('persist', {})
                persist.update(result.meta.get('persist', {})

                result.meta['persist'] = persist

            yield result

    return inner

どんな助けでも大歓迎です。

4

1 に答える 1

1

新しいミドルウェアを作成し、コードを配置してメタを永続化しますprocess_spider_input

于 2013-03-11T16:25:25.453 に答える