用不同深度爬取多个起始网址

1 投票
1 回答
920 浏览
提问于 2025-04-17 04:51

我正在尝试让Scrapy 0.12根据在start_urls变量中的不同网址,改变它的“最大深度”设置。

如果我理解文档没错的话,这个设置是全局的,也就是说它对整个框架都是一样的,并没有“请求是从初始请求发出的”这种概念。

有没有办法绕过这个限制呢?是否可以有多个相同的爬虫实例,每个实例用不同的起始网址和不同的深度限制?

1 个回答

1

抱歉,我好像一开始没有理解你的问题。让我来纠正一下我的回答:

响应中有一个叫 depth 的键,它在 meta 里。你可以检查这个键,然后采取相应的行动。

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

撰写回答