Scrapyでカスタムダウンローダーミドルウェアを定義して、特定のURLへのすべてのリクエストを無視しようとしています(これらのリクエストは他のURLからリダイレクトされるため、最初にリクエストを生成するときにフィルターで除外できません)。
私は次のコードを持っています、そのアイデアは応答処理段階でこれをキャッチすることです(他のリクエストにリダイレクトするリクエストがどのように機能するか正確にはわからないため)、URLをチェックし、それが私が試しているものと一致するかどうかフィルターで除外してからIgnoreRequest例外を返します。そうでない場合は、通常どおり応答を返し、処理を続行できるようにします。
from scrapy.exceptions import IgnoreRequest
from scrapy import log
class CustomDownloaderMiddleware:
def process_response(request, response, spider):
log.msg("In Middleware " + response.url, level=log.WARNING)
if response.url == "http://www.achurchnearyou.com//":
return IgnoreRequest()
else:
return response
そして私はこれをミドルウェアの口述に追加します:
DOWNLOADER_MIDDLEWARES = {
'acny.middlewares.CustomDownloaderMiddleware': 650
}
値は650で、RedirectMiddlewareの直後に実行する必要があります。
ただし、クローラーを実行すると、次のようなエラーが発生します。
ERROR: Error downloading <GET http://www.achurchnearyou.com/venue.php?V=00001>: process_response() got multiple values for keyword argument 'request'
このエラーはクロールされた最初のページで発生しており、なぜ発生しているのか理解できません。マニュアルの説明に従っていると思います。私は何が間違っているのですか?