Scrapy Crawl Spider仅刮掉一定数量的图层

时间:2013-09-19 17:34:18

标签: python scrapy

您好我想使用Scrapy CrawlSpider类(Documentation here)抓取网页的所有页面。

class MySpider(CrawlSpider):
    name = 'abc.com'
    allowed_domains = ['abc.com']
    start_urls = ['http://www.abc.com']

    rules = (
        Rule(SgmlLinkExtractor(allow=('item\.php', )), callback='parse_item')
    )

    def parse_item(self, response):
        self.log('Hi, this is an item page! %s' % response.url)
        ...

(1)因此,这个蜘蛛将从页面开始:www.abc.com,它在start_urls中定义,它将自动进行解析......然后按照www.abc.com中的每个链接进行操作遵循规则吧?我想知道是否有一种方法,所以我只能刮一定数量的层...说只刮第一层(链接直接来自www.abc.com)?

(2)因为我在allowed_deomains中定义了只会删除abc.com网址。所以我不需要在规则中重新定义它?并做这样的事情:

Rule(SgmlLinkExtractor(allow=('item\.php', )), allow_domains="www.abc.com", callback='parse_item')

(3)如果我正在使用crawlspider,如果我不在蜘蛛类中定义规则会发生什么?它会抓取所有页面?或者它甚至不会跟随任何一个,因为该规则尚未“满足”?

1 个答案:

答案 0 :(得分:3)

  1. 设置DEPTH_LIMIT设置:

      

    DEPTH_LIMIT¶

         

    默认值:0

         

    允许为任何网站抓取的最大深度。如果为零,   不会施加任何限制。

  2. 不,您不需要添加额外的网址检查。如果您未在allow_domains级别指定Rule,则只会提取包含abc.com域名的网址。

  3. 如果您没有定义规则,则不会提取任何网址(将像BaseSpider一样工作)。
  4. 希望有所帮助。