如何在python scrapy中爬行时为不同的网站设置不同的深度限制?

时间:2014-11-28 07:55:10

标签: python-2.7 scrapy

我目前的计划是

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。谁能帮帮我吗。提前谢谢。

1 个答案:

答案 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,然后设置。