オフサイトミドルウェアは既定でregexを既に使用していますが、公開されていません。あなたが正規表現に提供するドメインをコンパイルしますが、ドメインはエスケープされるので、allowed_domains
の正規表現コードは動作しません。
あなたができることは、ミドルウェアを拡張し、get_host_regex()
メソッドをオーバーライドして独自のオフサイトポリシーを実装することです。
scrapy.spidermiddlewares.offsite.OffsiteMiddleware
で元のコード:
# middlewares.py
class MyOffsiteMiddleware(OffsiteMiddleware):
def get_host_regex(self, spider):
allowed_regex = getattr(spider, 'allowed_regex', '')
return re.compile(allowed_regex)
# spiders/myspider.py
class MySpider(scrapy.Spider):
allowed_regex = '.+?\.com'
# settings.py
DOWNLOADER_MIDDLEWARES = {
'myproject.middlewares.MyOffsiteMiddleware': 666,
}
が、これは私が私で指定された部分文字列が含まれている特定のURLをクロールすることができます:あなたはあなた自身の正規表現を返すようにオーバーライドすることができ
? –
私は質問をしたときにこれに遭遇しました。 –
@RishiSaraswatはい。私が提供した例では、 'allowed_regex = 'aaa | bbb | ccc'' – Granitosaurus