最終的な URL が既にクロールされている場合を含め、すべてのリダイレクト パスをキャッチするために、カスタムの重複フィルターを作成しました。
import logging
from scrapy.dupefilters import RFPDupeFilter
from seoscraper.items import RedirectionItem
class CustomURLFilter(RFPDupeFilter):
def __init__(self, path=None, debug=False):
super(CustomURLFilter, self).__init__(path, debug)
def request_seen(self, request):
request_seen = super(CustomURLFilter, self).request_seen(request)
if request_seen is True:
item = RedirectionItem()
item['sources'] = [ u for u in request.meta.get('redirect_urls', u'') ]
item['destination'] = request.url
return request_seen
では、RedirectionItem をパイプラインに直接送信するにはどうすればよいでしょうか。データを直接送信できるように、カスタム フィルターからパイプラインをインスタンス化する方法はありますか? または、カスタム スケジューラも作成して、そこからパイプラインを取得する必要がありますが、どのようにすればよいでしょうか?