美文网首页
scrapy之CrawlSpider

scrapy之CrawlSpider

作者: f9f73935e28c | 来源:发表于2016-09-30 11:35 被阅读0次

    简介

    class scrapy.spiders.CrawlSpider

    CrawlSpider是爬取一般网站常用的spider,适合于从爬取的网页中获取link并继续爬取的场景。
    除了从Spider继承过来的性外,其提供了一个新的属性rules,它是一个Rule对象列表,每个Rule对象定义了种义link的提取规则,如果多个Rule匹配一个连接,那么根据定义的顺序使用第一个。

    例子

    from coolscrapy.items import HuxiuItem
    import scrapy
    from scrapy.spiders import CrawlSpider, Rule
    from scrapy.linkextractors import LinkExtractor
    
    
    class LinkSpider(CrawlSpider):
        name = "link"
        allowed_domains = ["huxiu.com"]
        start_urls = [
            "http://www.huxiu.com/index.php"
        ]
    
        rules = (
            # 提取匹配正则式'/group?f=index_group'链接 (但是不能匹配'deny.php')
            # 并且会递归爬取(如果没有定义callback,默认follow=True).
            Rule(LinkExtractor(allow=('/group?f=index_group', ), deny=('deny\.php', ))),
            # 提取匹配'/article/\d+/\d+.html'的链接,并使用parse_item来解析它们下载后的内容,不递归
            Rule(LinkExtractor(allow=('/article/\d+/\d+\.html', )), callback='parse_item'),
        )
    
        def parse_item(self, response):
            self.logger.info('Hi, this is an item page! %s', response.url)
            detail = response.xpath('//div[@class="article-wrap"]')
            item = HuxiuItem()
            item['title'] = detail.xpath('h1/text()')[0].extract()
            item['link'] = response.url
            item['posttime'] = detail.xpath(
                'div[@class="article-author"]/span[@class="article-time"]/text()')[0].extract()
            print(item['title'],item['link'],item['posttime'])
            yield item
    

    详解

     class scrapy.spiders.Rule(link_extractor, callback=None, cb_kwargs=None, follow=None, process_links=None, process_request=None)
    

    主要参数:
    link_extractor是一个Link Extractor对象。 其定义了如何从爬取到的页面提取链接。

    callback参数:当link_extractor获取到链接时会调用该参数所指定的回调函数. 该回调函数接受一个response作为其第一个参数, 并返回一个包含 Item 以及(或) Request 对象(或者这两者的子类)的列表(list)。
    callback参数使用注意:当编写爬虫规则时,请避免使用parse作为回调函数。于CrawlSpider使用parse方法来实现其逻辑,如果您覆盖了parse方法,crawlspider将会运行失败。

    cb_kwargs:包含传递给回调函数的参数(keyword argument)的字典。
    follow:指定了根据该规则从response提取的链接是否需要继续跟进。当callback为None, 默认值为True。
    process_links:主要用来过滤由link_extractor获取到的链接。
    process_request:主要用来过滤在rule中提取到的request。

     class scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor(allow=(), deny=(), allow_domains=(), deny_domains=(), deny_extensions=None, restrict_xpaths=(), restrict_css=(), tags=('a', 'area'), attrs=('href', ), canonicalize=True, unique=True, process_value=None)
    

    主要参数:
    allow:满足这个正则表达式(或正则表达式列表)的URL会被提取,如果为空,则全部匹配。
    deny:满足这个正则表达式(或正则表达式列表)的URL一定不提取。如果为空,不过滤任何URL。
    allow_domains:会被提取的链接的domains(或domains列表)。
    deny_domains:一定不会被提取链接的domains(或domains列表)。
    deny_extensions: 需要忽略的url扩展名列表,如"bmp", "gif", "jpg", "mp3", "wav", "mp4", "wmv"。默认使用在模块scrapy.linkextractors中定义的IGNORED_EXTENSIONS。
    restrict_xpaths:指定提取URL的xpath(或xpath列表)。若不为空,则只使用该参数去提取URL。和allow共同作用过滤链接。
    restrict_css:指定提取URL的css列表。若不为空,则只使用该参数去提取URL
    tags:指定提取URL的页面tag列表。默认为('a','area')
    attrs:从tags参数中指定的tag上提取attrs。默认为('href')
    canonicalize:是否标准化每个URL,使用scrapy.utils.url.canonicalize_url。默认为True。
    unique:是否过滤提取过的URL
    process_value:处理tags和attrs提取到的URL

    scrapy shell中测试Link Extractor

    scrapy shell "http://blog.csdn.net/u012150179/article/details/11749017"
    from scrapy.linkextractors import LinkExtractor
    item = LinkExtractor(allow=('/u012150179/article/details')).extract_links(response)
    

    相关文章

      网友评论

          本文标题:scrapy之CrawlSpider

          本文链接:https://www.haomeiwen.com/subject/swwlyttx.html