私は、スパイダーのstart_urls変数の異なるURLの "最大深度"設定を変更するためにScrapy 0.12を取得しようとしています。異なる深さの複数の開始URLをクロールする
ドキュメントを正しく理解していれば、DEPTH_LIMITの設定はフレームワーク全体でグローバルであり、「最初のものからのリクエスト」という概念はないため、方法はありません。
これを回避する方法はありますか?同じスパイダーの複数のインスタンスを、開始URLごとに異なる深さ制限で初期化することは可能ですか?
私は、スパイダーのstart_urls変数の異なるURLの "最大深度"設定を変更するためにScrapy 0.12を取得しようとしています。異なる深さの複数の開始URLをクロールする
ドキュメントを正しく理解していれば、DEPTH_LIMITの設定はフレームワーク全体でグローバルであり、「最初のものからのリクエスト」という概念はないため、方法はありません。
これを回避する方法はありますか?同じスパイダーの複数のインスタンスを、開始URLごとに異なる深さ制限で初期化することは可能ですか?
申し訳ありませんが、私は最初から正しく質問しているようには思えませんでした。私の答えを訂正:
応答depth
meta
のキーがあります。これを確認して適切な処置をとることができます。それが始まるURLかからの要求によって生成されたが、知っているに応じから簡単な方法はありませんので、動作しないでしょう
class MySpider(BaseSpider):
def make_requests_from_url(self, url):
return Request(url, dont_filter=True, meta={'start_url': url})
def parse(self, response):
if response.meta['start_url'] == '???' and response.meta['depth'] > 10:
# do something here for exceeding limit for this start url
else:
# find links and yield requests for them with passing the start url
yield Request(other_url, meta={'start_url': response.meta['start_url']})
http://doc.scrapy.org/en/0.12/topics/spiders.html#scrapy.spider.BaseSpider.make_requests_from_url
は今、私はそれについて考える、多分それはなんとかなら最初の瞬間から1以上のメタ['深さ']を持っています。私はコードを見てみる –
答えを変更しました – warvariuc