当前位置: 首页 > news >正文

爬虫 大规模数据 采集心得和示例

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

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.

 

 

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

相关文章:

  • RemoTing 搭建简单实现
  • CentOS中利用Docker安装RabbitMQ
  • MySQL DBA技术难度低为什么工资比Oracle高?
  • Kubernetes中StatefulSet介绍
  • Flutter 中的 Animations(二)
  • Spring Cloud Commons 普通抽象
  • zabbix中文问题汇总
  • join
  • 华为S5300系列交换机V200R001SPH027升级补丁
  • 正则表达式小结
  • sql查询语句
  • [转] 梦里Babel知多少(一)
  • 性能测试 tps持续走低,响应时间持续增加,瓶颈分析
  • BZOJ1497 最大获利
  • 探秘varian:优雅的发布部署程序
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 230. Kth Smallest Element in a BST
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Angular Elements 及其运作原理
  • Apache的80端口被占用以及访问时报错403
  • canvas 五子棋游戏
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • E-HPC支持多队列管理和自动伸缩
  • js操作时间(持续更新)
  • maven工程打包jar以及java jar命令的classpath使用
  • Meteor的表单提交:Form
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Octave 入门
  • Python学习之路13-记分
  • Theano - 导数
  • Vue学习第二天
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 关于 Cirru Editor 存储格式
  • 官方解决所有 npm 全局安装权限问题
  • 蓝海存储开关机注意事项总结
  • 让你的分享飞起来——极光推出社会化分享组件
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​iOS实时查看App运行日志
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • $forceUpdate()函数
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (06)Hive——正则表达式
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (6)添加vue-cookie
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (算法)前K大的和
  • (转)mysql使用Navicat 导出和导入数据库
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .md即markdown文件的基本常用编写语法