• Scrapy学习-20-数据收集


    Scrapy的数据收集功能
    定义
      Scrapy提供了方便的收集数据的机制。数据以key/value方式存储,值大多是计数值。
      该机制叫做数据收集器(Stats Collector),可以通过 Crawler API 的属性 stats 来使用。
     
    特点
      无论数据收集(stats collection)开启或者关闭,数据收集器永远都是可用的。
      因此您可以import进自己的模块并使用其API(增加值或者设置新的状态键(stat keys))。
      该做法是为了简化数据收集的方法: 您不应该使用超过一行代码来收集您的spider,Scrpay扩展或任何您使用数据收集器代码里头的状态。
      数据收集器的另一个特性是(在启用状态下)很高效,(在关闭情况下)非常高效(几乎察觉不到)。
      数据收集器对每个spider保持一个状态表。当spider启动时,该表自动打开,当spider关闭时,自动关闭
     
    使用
    设置数据                          stats.set_value('hostname', socket.gethostname())
    
    增加数据值                        stats.inc_value('pages_crawled')
    
    当新的值比原来的值大时设置数据      stats.max_value('max_items_scraped', value)
    
    当新的值比原来的值小时设置数据      stats.min_value('min_free_memory_percent', value)
    
    获取数据                          stats.get_value('pages_crawled')
    
    获取所有数据                       stats.get_stats()
    可用的数据收集器
      MemoryStatsCollector
        一个简单的数据收集器。其在spider运行完毕后将其数据保存在内存中。数据可以通过 spider_stats 属性访问。该属性是一个以spider名字为键(key)的字典

      DummyStatsCollector
        该数据收集器并不做任何事情但非常高效(因为什么都不做(写文档的人真调皮o(╯□╰)o))。 您可以通过设置 STATS_CLASS 启用这个收集器,来关闭数据收集,提高效率。
           不过,数据收集的性能负担相较于Scrapy其他的处理(例如分析页面)来说是非常小的
     
    使用实例,统计处理404页面
    class JobboleSpider(scrapy.Spider):
        name = "jobbole"
        allowed_domains = ["blog.jobbole.com"]
        start_urls = ['http://blog.jobbole.com/all-posts/']
        handle_httpstatus_list = [404]
    
        def __init__(self, **kwargs):
            self.fail_urls = []
    
        def parse(self, response):
            if response.status == 404:
                self.fail_urls.append(response.url)
                self.crawler.stats.inc_value("failed_url")
    
    # 可能会影响统计因素
    # SPIDER_MIDDLEWARES = {
    #    'ArticleSpider.middlewares.ArticlespiderSpiderMiddleware': 543,
    # }
  • 相关阅读:
    关于http请求头的一些事
    关于http抓取字段的一些事
    多线程的一些事
    正则的一些事
    出现问题集及解决方案
    常见的正则
    Http常见状态码
    list&tuple简记
    函数式编程--高阶函数--sorted
    函数式编程--高阶函数--filter
  • 原文地址:https://www.cnblogs.com/cq146637/p/9077545.html
Copyright © 2020-2023  润新知