ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python爬虫工程师必学——App数据抓取实战

2019-09-28 13:57:12  阅读:246  来源: 互联网

标签:Python App 必学 request 抓取 spider key 数据 self


Python爬虫工程师必学 App数据抓取实战

    爬虫分为几大方向,WEB网页数据抓取、APP数据抓取、软件系统数据抓取。主要讲解如何用python实现App数据抓取  

数据去重又称重复数据删除,是指在一个数字文件集合中,找出重复的数据并将其删除,只保存唯一的数据单元。数据去重可以有效避免资源的浪费,所以数据去重至关重要

 

数据去重

   数据去重可以从两个节点入手:一个是URL去重。即直接筛选掉重复的URL;另一个是数据库去重。即利用数据库的一些特性筛选重复的数据。

 def process_spider_output(self, response, result, spider):
    for r in result:  
        if isinstance(r, Request):    #对结果进行分析,如果是url,继续下一步,否则跳过
            key = self._get_key(r)    #通过_get_key函数生成key
            if key in self.db:        #查看key是否在数据库中
                logger.info("Ignoring already visited: %s" % r)   #如果在数据库,就抛弃
                if self.stats:
                    self.stats.inc_value('deltafetch/skipped', spider=spider)
                continue
        elif isinstance(r, (BaseItem, dict)):   #对结果分析,如果是dict or item ,继续下一步
            key = self._get_key(response.request)   
            self.db[key] = str(time.time())     #对url进行持久化操作
            if self.stats:
                self.stats.inc_value('deltafetch/stored', spider=spider)
        yield r
 def _get_key(self, request):
        #key值的生成,要么是request.meta传过来,要么使用指纹算法生成
        key = request.meta.get('deltafetch_key') or request_fingerprint(request)
 
        return to_bytes(key)   

 

URL去重
为什么需要进行URL去重?
  在爬虫启动工作的过程中,我们不希望同一个网页被多次下载,因为重复下载不仅会浪费CPU机时,还会为搜索引擎系统增加负荷。而想要控制这种重复性下载问题,就要考虑下载所依据的超    链接,只要能够控制待下载的URL不重复,基本可以解决同一个网页重复下载的问题。
  对于已经抓取过的链接,进行持久化,并且在启动的时候加载进入去重队列,是一个比较强的需求。 
  它主要应对爬虫故障重跑,不需要重跑所有链接


如何确定去重强度?
  根据爬取周期确定使用去重强度 
  抓取周期在一个小时内,不需要对已经抓取的链接做持久化 
  抓取周期在一天内(或抓取的数据总量30w以下),需要对抓取链接做一个相对简单的持久化 
  抓取周期在一天以上,需要对抓取链接做相对专业的持久化

标签:Python,App,必学,request,抓取,spider,key,数据,self
来源: https://www.cnblogs.com/itman123/p/11597158.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有