用不同深度爬取多个起始网址
我正在尝试让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