我目前的计划是
class DNCrawlerSpider(CrawlSpider):
urls = []
url = ""
def __init__(self):
#I我在这里从数据库填充网址
self.urls = {'link':'http://www.amcastle.com', 'depth_limit':1}, {'link':'http://192.168.7.54/crawl_test.php', 'depth_limit':2}
self.url = self.get_next_url()
def start_requests(self):
使用生成器的#yielding请求 link = self.url.next() while(link.link!=''): #trying覆盖深度限制
settings.overrides['DEPTH_LIMIT'] = link.depth_limit
yield Request(link, callback=self.crawl_recursive)
link = self.url.next()
但是每个站点的depth_limit不起作用。但是在爬行时正在考虑设置页面中提供的depth_limit。有没有办法在程序中处理depth_limit。谁能帮帮我吗。提前谢谢。
答案 0 :(得分:0)
您可以使用meta
对象的Request
属性来跟踪当前深度和最大深度:
yield Request(link.link, callback=self.crawl_recursive, meta={'present_depth': 0, 'depth_limit': link.depth_limit})
然后,您的解析方法可以像这样检查深度:
def crawl_recursive(self, response):
if response.meta["present_depth"] > response.meta["depth_limit"]:
#too deep!
return []
请记住在创建新的Request
时增加present_depth,然后设置。