京公网安备 11010802034615号
经营许可证编号:京B2-20210330
大数据时代,这项收集数据的技能不可少
大数据是未来的“新石油”。《人类简史:从动物到上帝》的作者尤瓦尔·赫拉利说:大数据将是人类自由意志的终结,数据主义将取代以往的宗教和人文主义,成为未来的信仰。人人都在谈大数据,谈DT时代,我们剥去社会附加上的外衣,则回归“数据”二字。
那如何获取数据呢?
在运营公众号这么长一段时间,经常有人问超模君:超模君,我需要什么的数据,该怎么处理,或者直接问超模君,能不能给我提供一些数据?
其实超模君内心是奔溃的。。。而一般我给出的建议如果没有整理好的数据,可以尝试做个爬虫试试。而在获取数据的道路上并不简单,爬虫可谓是“麻雀虽小,五脏俱全”,爬虫虽然操作起来很简单,用十几行脚本语言就可以搞定,但其中可涉及到网络通信,字符串处理,数据库等,能使用到一种语言的几乎所有组件。
一言不合就上代码
我们先来看一个最简单的最简单的爬虫,用python写成,只需要三行。
import requests
url="http://www.cricode.com"
r=requests.get(url)
上面这三行爬虫程序,就如下面这三行情诗一般,很干脆利落。
是好男人,
就应该在和女友吵架时,
抱着必输的心态。
上面那个最简单的爬虫,不是一个完整的爬虫,因为爬虫通常需要以下3个步骤:
1)给定的种子URLs,爬虫程序将所有种子URL页面爬取下来
2)爬虫程序解析爬取到的URL页面中的链接,将这些链接放入待爬取URL集合里
3)重复1、2步,直到达到指定条件才终止爬取
因此,一个完整的爬虫大概是这样子的:
import requests #用来爬取网页
from bs4 import BeautifulSoup #用来解析网页
seds = ["http://www.hao123.com", #我们的种子
"http://www.csdn.net",
"http://www.cricode.com"]
sum = 0 #我们设定终止条件为:爬取到100000个页面时,就不玩了
while sum < 10000 :
if sum < len(seds):
r = requests.get(seds[sum])
sum = sum + 1
do_save_action(r)
soup = BeautifulSoup(r.content)
urls = soup.find_all("href",.....) //解析网页
for url in urls:
seds.append(url)
else:
break
上面那个完整的爬虫,不足20行代码,相信你能找出20个需要改进的地方来。因为它的缺点实在是太多了。下面列举一下它的N个缺点:
1)我们的任务是爬取1万个网页,按上面这个程序,一个人在默默的爬取,假设爬起一个网页3秒钟,那么,爬一万个网页就要3万秒钟。MGD,我们可以考虑开启多个线程去一起爬取,或者用分布式架构去并发地爬取网页。
2)种子URL和后续解析到的URL都放在一个列表里,我们应该将这些待爬取的URL存放到一个新的更合理的数据结构里,例如队列或者优先队列。
3)对各个网站的URL,我们一视同仁,然而,我们应该是要区别对待的。应当考虑大站好站优先原则。
4)我们每次发起请求,都是根据URL来发起的,而在这个过程中会牵涉到DNS解析(将URL转换成 IP 地址)。一个网站通常有数以万计的URL,所以我们可以考虑将这些网站域名的 IP 地址进行缓存,避免每次都发起DNS请求,浪费时间。
5)解析到网页中的URLs后,我们没有做任何去重处理,全部放入了待爬取的列表中。事实上,可能有很多链接是重复的,我们做了很多无用功。
6)…..
那么,真正的问题来了,学挖掘机到底哪家强?
现在我们就来列出上面找出的几个问题的解决方案。
1)如何做到并行爬取
我们可以有多重方法去实现并行。
多线程或者线程池方式,一个爬虫程序内部开启多个线程。同一台机器开启多个爬虫程序,这样,我们就有N多爬取线程在同时工作。能大大缩短时间。
此外,当我们要爬取的任务特别多时,一台机器、一个网点明显不够,这时我们就要考虑分布式爬虫了。常见的分布式架构有:主从(Master——Slave)架构、点对点(Peer to Peer)架构,混合架构等。
说到分布式架构,我们需要考虑的问题就有很多,比如我们需要分派任务,各个爬虫之间需要通信合作,共同完成任务,不要重复爬取相同的网页。分派任务时我们要做到公平公正,就需要考虑如何进行负载均衡。负载均衡,我们第一个想到的就是Hash,比如根据网站域名进行hash。
负载均衡分派完任务之后,并不意味着万事大吉了,万一哪台机器崩溃了呢?原先指派给崩溃的那台机器的任务应该再指派给哪台机器?又或者哪天要增加几台机器,任务重新分配问题该如何解决?
用一致性Hash算法就是一个比较好的解决方案。
2)如何对待待抓取队列
类似于操作系统如何调度进程的场景。
不同的网站,重要程度不同,因此,可以设计一个优先级队列来存放待爬取的网页链接。这样一来,每次抓取时,重要的网页都会被我们优先爬取。
另外,你也可以效仿操作系统的进程调度策略之多级反馈队列调度算法。
3)进行DNS缓存
为了避免每次都发起DNS查询,我们可以将DNS进行缓存。DNS缓存当然是设计一个hash表来存储已有的域名及其 IP 。
4)进行网页去重
说到网页去重,应该都会想到垃圾邮件过滤。垃圾邮件过滤的一个经典的解决方案是Bloom Filter(布隆过滤器)。布隆过滤器原理简单来说就是:建立一个大的位数组,然后用多个Hash函数对同一个url进行hash得到多个数字,然后将位数组中这些数字对应的位置为1。下次再来一个url时,同样是用多个Hash函数进行hash,得到多个数字,我们只需要判断位数组中这些数字对应的为是全为1,如果全为1,那么说明这个url已经出现过。如此,便完成了url去重的问题。不过,这种方法会有误差,但是只要误差在我们的接受范围之内,就像是1万个网页,我们只爬取到了9999个,剩下那1个网页,谁在乎呢!
5)数据存储的问题
数据存储同样是一个很有技术含量的问题。用关系数据库存取还是用NoSQL,或者是自己设计特定的文件格式进行存储,都有很大工程可做。
6)如何完成进程间通信
分布式爬虫,离不开进程间的通信。我们可以以规定的数据格式进行数据交互,去完成进程间的通信。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
AB实验是互联网产品迭代、营销优化、功能升级的核心科学验证手段,通过流量随机分组、对照组与实验组对比,科学验证策略、功能、 ...
2026-08-10在MySQL数据库优化中,索引是提升查询效率、降低数据库IO开销、优化系统性能的核心手段。普通单列索引仅适配简单查询场景,面对 ...
2026-08-10 很多数据分析师每天盯着几十个指标,但当被问到“这套指标要支撑什么业务目标”“指标之间是什么逻辑关系”“业务变化时如何 ...
2026-08-10在数字化市场调研体系中,大数据与小数据是两类核心调研数据形态,分别对应海量行为统计与精准样本深度调研。行业普遍存在认知误 ...
2026-08-07数据透视表是Excel、WPS中最核心的数据分析工具,凭借快速汇总、分组统计、动态筛选的优势,被广泛应用于销量统计、业绩复盘、数 ...
2026-08-07 很多数据分析师每天盯着GMV、DAU、转化率,但当被问到“哪些指标在所有行业都适用”“哪些指标只对电商有意义”“二者如何搭 ...
2026-08-07在商品销量、市场需求、营收规模等业务数据中,季节性波动是最普遍、最核心的数据特征。零售快消、食品餐饮、家电服饰、电商行业 ...
2026-08-06在流量红利消退、市场竞争白热化的商业环境中,传统依托经验、跟风投放、广撒网式的营销模式,逐渐暴露出成本高、精准度低、转化 ...
2026-08-06 很多数据分析师每天盯着GMV、DAU、转化率,但当被问到“什么是指标”“指标和维度有什么区别”“如何定义指标值的计算规则和 ...
2026-08-06【核心关键词】知识、设备、工程师、数字化、建模、算法、工业大数据、数据分析、控制算法、机器学习、深度学习、业务目标、工 ...
2026-08-05增长率是数据分析、业务报表、可视化看板中最核心的指标之一,常用于衡量营收、销量、用户量、流量等业务数据的涨跌幅度与发展趋 ...
2026-08-05小陈是某电商平台的数据分析师。老板交给他一个任务:“我们平台的注册用户已经突破1000万了,想了解一下用户的平均月消费金额。 ...
2026-08-05在机器学习建模、数据预处理、抽样划分、模型初始化训练的全流程中,随机种子是控制实验随机性、保证结果可复现、提升模型稳定性 ...
2026-08-04Python作为面向对象的主流编程语言,核心编程体系由变量、方法、类三大基础要素构成。三者层层递进、相互协作,支撑起所有基础代 ...
2026-08-04 很多数据分析师沉迷于复杂的机器学习算法,却忽略了数据分析最基础也最核心的能力——描述性统计。事实上,80%的商业分析问 ...
2026-08-04为什么学习数据分析? 当下,我们已然步入数据要素价值全面释放的智能时代。数据不再只是零散的数字记录,更是驱动新质生产力运 ...
2026-08-03CDA等级认证证书有效期为三年,三年进行一次年审,主要考察CDA持证人的职业发展情况;学历、工作单位及职业变更情况;继续教育 ...
2026-08-03【核心关键词】金融、岗位、企业、算法、知识、专业、理论、课程、软件、数据分析、业务类型、应用场景、经营管理、大型企业、 ...
2026-08-03在日常数据分析、业务报表复盘、业绩预测工作中,平均增长率是衡量数据长期变化趋势的核心指标,广泛用于营收增长、用户增长、销 ...
2026-08-03很多人把统计学理解为“一堆公式和计算”,却忽略了它的本质——一门让数据“开口说话”的科学。真正的数据分析高手,不是会算平 ...
2026-08-03