zoukankan      html  css  js  c++  java
  • 爬虫 大规模数据 采集心得和示例

     本篇主要介绍网站数据非常大的采集心得

    1.  什么样的数据才能称为数据量大:

      我觉得这个可能会因为每个人的理解不太一样,给出的定义 也不相同。我认为定义一个采集网站的数据大小,不仅仅要看这个网站包括的数据量的大小,还应该包括这个网址的采集难度,采集网站的服务器承受能力,采集人员所调配的网络带宽和计算机硬件资源等。这里我姑且把一个网站超过一千万个URL链接的叫做数据量大的网站。

    2. 数据量大的网站采集方案:

      2.1 . 采集需求分析:

         作为数据采集工程师,我认为最重要的是要做好数据采集的需求分析,首先要预估这个网址的数据量大小,然后去明确采集哪些数据,有没有必要去把目标网站的数据都采集下来,因为采集的数据量越多,耗费的时间就越多,需要的资源就越多,对目标网站造成的压力就越大,数据采集工程师不能为了采集数据,对目标网站造成太大的压力。原则是尽量少采集数据来满足自己的需求,避免全站采集。

      2.2. 代码编写:

        因为要采集的网站数据很多,所以要求编写的代码做到稳定运行一周甚至一个月以上,所以代码要足够的健壮,足够的强悍。一般要求做到网站不变更模板,程序能一直执行下来。这里有个编程的小技巧,我认为很重要,就是代码编写好以后,先去跑一两个小时,发现程序的一些报错的地方,修改掉,这样的前期代码测试,能保证代码的健壮性。

      2.3  数据存储:

        当数据量有三五千万的时候,无论是MySQL还是Oracle还是SQL Server,想在一个表里面存储,已经不太可能了,这个时候可以采用分表来存储。数据采集完毕,往数据库插入的时候,可以执行批量插入等策略。保证自己的存储不受数据库性能等方面的影响。

      2.4 调配的资源:

        由于目标网站数据很多,我们免不了要去使用大的带宽,内存,CPU等资源,这个时候我们可以搞一个分布式爬虫系统,来合理的管理我们的资源。

    3. 爬虫的道德

      对于一些初级的采集工程师,为了更快的采集到数据,往往开了很多的多进程和多线程,后果就是对目标网站造成了dos攻击,结果是目标网站果断的升级网站,加入更多的反爬策略,这种对抗对采集工程师也是极其不利的。个人建议下载速度不要超过2M, 多进程或者多线程不要过百。

    示例:

      

    要采集的目标网站有四千万数据,网站的反爬策略是封ip,于是专门找了一台机器,开了二百多个进程去维护ip池,ip池可用的ip在500-1000个,并且保证ip是高度可用的。

    代码编写完毕后,同是在两台机器上运行,每天机器开启的多线程不超过64个,下载速度不超过1M.

    个人知识有限,请大牛多多包涵

  • 相关阅读:
    Linux shell中运行命令后加上字符“&”的作用(转)
    初探Nginx架构
    NeoLoad系列- 快速上手教程
    Web服务器性能压力测试工具
    Web页面性能测试工具浅析
    主流压力测试工具推荐
    Jmeter系列-webdriver代码范例
    Jmeter系列-webdriver插件
    Jmeter系列-自动生成html报告
    loadrunner如何监控windows系统的资源
  • 原文地址:https://www.cnblogs.com/xuchunlin/p/9400462.html
Copyright © 2011-2022 走看看