京公网安备 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
在Python数据分析中,Pandas库的DataFrame是最核心、最常用的结构化数据表对象,类似于Excel的二维表格,具备规整的行列结构、字 ...
2026-09-07在数据分析、经营复盘、业绩预测与经济统计工作中,平均增速(平均增长率)是衡量数据长期变化趋势、业务发展快慢的核心指标。不 ...
2026-09-07 很多数据分析师精通Excel单元格操作,但当被问到“表结构数据的基本处理单位是什么”“字段和记录的本质区别”“为什么表结 ...
2026-09-07随着大数据技术的快速发展,商业竞争逐步从传统的经验式经营转变为数据驱动的精细化运营。海量的用户行为数据、交易数据、运营数 ...
2026-09-04CDA数据分析师 出品 作者:李诗怡 1. 波士顿矩阵(BCG Matrix) 定义: BCG于1970年提出的业务组合分析工具,以"市场增长率"(纵 ...
2026-09-04 数据分析师八成以上的时间在和数据表格打交道,但许多人拿到Excel后习惯性地先算、先分析,结果回头发现漏了一列关键数据, ...
2026-09-04数据透视表是Excel与Power BI中最核心的数据分析工具,具备快速汇总、维度拆分、动态筛选的能力,可高效完成数据归类与统计展示 ...
2026-09-03在Power BI数据分析可视化场景中,堆积柱状图+折线图是最常用的复合图表组合。堆积柱状图适合展示各细分维度当期数值、结构占比 ...
2026-09-03 很多数据分析师每天与Excel打交道,但当被问到“表格结构数据的基本处理单位是什么”“数据类型误判会引发哪些分析错误”“ ...
2026-09-03CDA数据分析师 出品 作者:李诗怡 一、8个核心数据清洗函数 1. TRIM:一键清除多余空格(最常用) 作用:仅保留文本中"单词/字 ...
2026-09-02数据分析的核心并非单纯操作工具、整理报表或绘制图表,而是依靠科学的思维逻辑挖掘数据价值、解释业务现象、指导经营决策。在完 ...
2026-09-02在社会经济、产业研究、区域治理与大数据实证分析中,面板数据是最具研究价值的数据类型。面板数据同时包含截面维度与时间维度信 ...
2026-09-02 很多数据分析师能熟练计算均值、标准差,但当被问到“如何用一张图让业务方3秒内看懂核心结论”“面对不同数据类型该怎么选 ...
2026-09-02在数据驱动决策的体系中,数据分析按照分析目的可分为描述性分析、诊断性分析、预测性分析与指导性分析四大类型。其中,诊断性分 ...
2026-09-01网络请求是Python爬虫开发、接口测试、数据拉取的核心基础功能,Python生态中主要依靠 urllib 和 requests 两大库实现HTTP请求操 ...
2026-09-01 很多数据分析师面对业务问题时,常常感到“知道要分析,却不知道用什么方法”。其实,数据分析并非无章可循——从三大基础范 ...
2026-09-01在数据库设计与业务数据维护中,自增ID是数据表最常用的主键字段,用于唯一标识每一条业务数据,正常状态下ID应保持连续递增。但 ...
2026-08-31在数理统计、数据分析、经济测算与日常量化评估中,平均值是刻画数据集中趋势、反映整体水平的基础核心指标。在实际应用中,最常 ...
2026-08-31在数据驱动的时代,数据分析早已不是“凭经验、靠感觉”的零散操作,而是一套具备固定逻辑、标准化流程的系统方法——这就是数据 ...
2026-08-31在大数据时代背景下,海量行业数据亟需通过专业化工具挖掘潜在价值,辅助企业业务决策、优化运营模式、规避经营风险。Python凭借 ...
2026-08-28