本篇主要介绍网站数据很是大的采集心得数据库
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.
我的知识有限,请大牛多多包涵