Scrapy Crawl Spider 只刮一定数量的层

Posted

技术标签:

【中文标题】Scrapy Crawl Spider 只刮一定数量的层【英文标题】:Scrapy Crawl Spider Only Scrape Certain Number Of Layers 【发布时间】:2013-09-24 22:23:00 【问题描述】:

您好,我想使用 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) 所以,这个蜘蛛将从 start_urls 中定义的页面 www.abc.com 开始,它会自动进行解析......然后跟踪 www.abc.com 中的每个链接哪个遵循规则对?我想知道有没有办法让我只能刮一定数量的层..说只刮第一层(直接来自 www.abc.com 的链接)?

(2) 因为我在 allowed_deomains 中定义了只有 abc.com 的 url 会被抓取。所以我不需要在规则中重新定义?并做这样的事情:

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

(3)如果我使用crawlspider,如果我没有在spider类中定义规则会怎样?它会爬取所有页面吗?或者它甚至不会遵循任何一个规则,因为规则没有被“满足”?

【问题讨论】:

【参考方案1】:

    设置DEPTH_LIMIT设置:

    DEPTH_LIMIT¶

    默认值:0

    允许抓取任何网站的最大深度。如果为零, 没有限制。

    不,您不需要添加额外的 url 检查。如果您未在 Rule 级别上指定 allow_domains,它将仅提取具有 abc.com 域的 URL。

    如果您不定义规则,它将不会提取任何 URL(将像 BaseSpider 一样工作)。

希望对您有所帮助。

【讨论】:

嗨,alecxe,非常感谢您的回答,我不知道在这个页面上继续提问是否合适,所以我开始了一个新线程,提出更多问题。非常欢迎您来看看。 ***.com/questions/18903197/…

以上是关于Scrapy Crawl Spider 只刮一定数量的层的主要内容,如果未能解决你的问题,请参考以下文章

scrapy spider及其子类

python爬虫scrapy入门6:Scrapy中runspider和crawl的区别

python爬虫scrapy入门6:Scrapy中runspider和crawl的区别

crawl spider

使用scrapy crawl name启动一个爬虫时出现的问题

Scrapy框架的执行流程解析