• 数据采集-步骤及注意事项


     这是一个纯文字版的干货篇

    1.确定采集途径

         网页采集和api(网页,APP,小程序)采集,

           网页采集需要使用工具(正则,HTMLAgility,Xpath这些)将我们 需要的数据提取出来。

         要是api采集的话,一般回来直接就是json数据了。

    2.数据分析

        采集是个系统化的操作,一般都会是多层级的数据采集,举个最简单的采集例子,新闻采集:

        新闻分类 -> 分页新闻列表 -> 新闻详情

        这里通常是一层一层地去采集:先获取分类,再找出分页参数规律,获取分类里面的所有新闻列表及详情超

        链接,最后再请求详情链接得到新闻详情,最后再去下载图片视频等静态资源,每一步只做简单重复的步骤,

        保证每个采集单元都是简单的操作,而不是一条链状的操作。

    3.写采集思路

        分析数据完了以后不要急着写采集代码,先写写思路,包括采集过程中可能会遇到的问题:访问限制(令牌、

        访问频率)、超时处理、错误处理 等等,先想好写下来。

    3.数据实体类生成

       因为采集回来的数据是一串文本,不方便处理,需要转成结构化的数据,这里采用先采集样例数据回来,

       使用工具直接生成实体类,如这个工具:实体生成工具

    4.开始采集

       对于数据量比较大的采集,先采集一小部分数据回来检查一下数据的正确性,数据量小的就直接采集

       确认没问题再去持久化,持久化时可以将原始采集数据保存下来,

       写每一级别的采集代码,每一级都如此,走通整个链确定代码逻辑没问题之后就可以真正开始采集了

       

    5.采集异常中断处理

        采集过程中一般都会遇到一些中断的问题:原始数据错误导致了程序错误、网络超时,访问限制

        可以采用小步数据持久化,如每采集200条记录存一次,清空一下内存里面的数据,记录采集进度位置,

        继续采集,发生异常时可以做异常二次采集操作,像网络超时这种异常通过二次采集都是可以解决的,

        最后如果二次采集都不行的话,就要记录下来,最后去手动处理了。

    6.静态资源下载

        由于静态资源具有任务执行时间长,受网络因素影响严重等特点,一般都会放到文本数据采集完了以后再

        去集中下载,此时任务就是简单的下载操作(新建文件夹,保存资源文件)。

    7.采集模式优化(单线程,多线程,多进程)

        如果全程都是单线程执行任务的话,耗时会比较长,在采集目标站点访问频率允许的条件下,我们可以

        通过多线程或者多进程来加快采集速度,这里在多进程采集模式下,遇到了一个问题:当两个进程同时

        进行批量数据持久化的时候,会因为冲突导致其中一个进程挂掉,这里不知道是不是我的DBHelper的问题,

       暂时 还不清楚是怎么一回事,通过将数据持久化的粒度放大可以大程度地避免这种冲突的出现

     8.优化建议

        1.采集是一个系统性的任务,需要先想明白再去做,减少推倒次数(思路推倒,代码推倒)   。

         2.在做数据持久化的时候如果使用的是数据库储存的方式,可以开启长连接或者生成批量操作语句

            一次执行,控制好语句长度,如果是采用参数化的方式,还需要注意Sqlserver 一次操作最多支持2000个

           参数

         3.获取图片时有些会是缩略图,这里需要尽可能找出获取大图的规律,或者去水印图片,有意识地去找,一般都能找到,如:

            淘宝:

                https://img.alicdn.com/imgextra/i2/3253381759/O1CN01QGtoxw1OrfJKnpTC3_!!3253381759.jpg_60x60q90.jpg
            微信头像:

                https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83errbT6eBrTibwCFjibL4sOYLibIib0ardJWP4uElA67tib65cKPSTaIQibrfOPlPZIt4M5MmBYmicLtPUujQ/132

            大众点评:

                https://img.meituan.net/msmerchant/d3667f0346795b854e960641ddcde72a611747.jpg%40280w_212h_1e_1c_1l%7Cwatermark%3D0
            京东:

                https://img10.360buyimg.com/n5/s50x64_jfs/t1/142541/12/15500/463034/5fbb8076E76a3f625/25060d50306979d4.jpg!cc_50x64.jpg

            图虫网:

                https://photo.tuchong.com/2691500/m/92200193.webp       m -> f、g、l、s、t

  • 相关阅读:
    hexo在git上搭建个人博客
    C++中的const
    C++ 面试 (1) 指针
    struct 大小计算
    php多路复用(多线程)socket相关应用
    centos6.5 redis应用环境搭建
    WebSocket的Cookie问题(转)
    java 获取参数泛型类型
    php编写TCP服务端和客户端程序
    phpize的作用(资料整理)
  • 原文地址:https://www.cnblogs.com/shellphen/p/14318509.html
Copyright © 2020-2023  润新知