如何做大数据的数据采集?
27 个回答
打好地基,才能稳健高楼,这个道理我们都懂。
大数据领域也是一样的,通过数据采集得到的数据数量越多、质量越高、品类越全,我们的大数据相关工作越能更好推进。
回到问题,如何进行数据采集?如何进行高效率、低成本的数据采集?
利益相关,八爪鱼在大数据领域深耕多年,是百万用户选择的网页数据采集器。本回答只涉及互联网公开数据的采集。
不管您是普通数据相关从业者,是爱好数据爬取的技术大佬,是追求高质量与快速度的企业用户,八爪鱼都能从不同维度,针对您的数据采集需求,提供最合适的产品与服务。
★ 海量内置数据源——淘宝、京东、亚马逊等主流网站全覆盖,下载八爪鱼客户端,马上获取数据
★ 自动识别配置规则——输入网址,点击自动识别,一键生成采集规则,自动按流程图采集数据
★ 提供云采集功能——5000多台云服务器7*24小时不间断运行,可实现定时采集,无需人员值守,提升采集效率,保障数据时效性
★ 拥有全自动代理IP,浏览器Cookie,验证码破解等功能,实现突破绝大多数网站的防采集策略,支持数据通过API接口导出
......更多功能等您探索
如果您对八爪鱼数据采集感兴趣,请下载使用吧!
在使用过程中有任何问题,都可以联系小八哟!
需要优质可靠的数据采集工具提供支持,对于最常见的 App、网页等业务生态,SDK 是企业最佳的数据采集方案。企业可以通过市面上 40+ 种 SDK 数据采集工具,灵活适配各类数据源, 实现全域数据源的高效采集。
以神策数据提供的数据治理方案作为参考,对于外部数据的接入,该数据治理方案包含了多种数据接入的通道,可以快速的将外部数据接入到企业数据平台进行数据的存储和数据的分析、可视化。预置通道集成了一方业务数据库、Excel 等数据文件、三方电商渠道、微信生态的私域数据接入。
同时,为了包容其他的数据源,整体设计以插件化的方式进行数据源的集成,除了下图的预置通道还可以快速集成其余数据通道。
对于外部接入进来的数据可以对数据进行快速的数据模型映射,将外部数据做简单的标准化和归一化的操作。对于每一个接入的数据都会记录在数据接入管理当中,知晓数据同步的具体情况。
与此同时,为了帮助接入进来的数据的最终确认可以对接入的数据进行预览,确认无误后会将数据写入到底层存储当中。
数据采集是数据应用的源头,是企业实现数字化经营的基础和前提。如果数据采集没有做好,会影响整体的数据质量,即使在后面环节进行弥补,其代价会更大,最终的数据应用以及基于数据做出的决策和反馈也必然会受到影响。 因此,企业需要一套标准化、规范化的数据采集方案来收集一方体系和三方平台的全域业务数据,夯实数据应用根基。通过数据采集 SDK、预置系统 / 数据对接、电商 / 三方平台 API、定制开发且集成进行全域的数据接入,从而打通各渠道数据,构建全域数据基础。
免费领取~
遇事不慌,先问ChatGPT
小王所在的公司最近在做降本增效,要求上半年每个人的微服务接口性能提升至少30%。小王思虑很久也没想到优化点,于是开始向ChatGPT寻求帮助,提问“如何定位性能问题”,ChatGPT 给出了3个答案。
第二个与第三个答案是本质同样使用时间模块记录程序函数的运行时时间,而这对于开发者来说,这可能是最为熟悉的方式,如下所示,使用4条Log 来定位性能瓶颈出现的性能范围,但这对于线上服务来说,不断地Log定位方式也意味着不断地重启,风险是可能带来不断地业务损失,但是更坏的一个问题是如果线上产生死锁等问题,重启也意味着”案发现场“的丢失,这也为下次问题的再次出现埋下隐患。
2023-03-17 15:55:01 [INF] outer function start
2023-03-17 15:55:10 [INF] inner function start
2023-03-17 15:55:13 [INF] inner function end
2023-03-17 15:55:30 [INF] outer function end
而ChatGPT 的首推答案也指出可以使用性能分析工具来帮助开发者定位瓶颈问题,随着软件工程的演进,性能分析工具的地位也愈加上升,对于一些新出现的编程语言,如Golang,性能诊断已经成为语言标准库的一部分。
什么是性能采集?
对于前端开发者来说,Chrome 浏览器中的性能分析可能是最为直观的性能采集,下图中Chrom记录加载网页每个事件的时间戳和持续时间,包括JavaScript函数执行、网络请求和渲染过程等。而这些数据也为前端开发者寻找网页性能瓶颈与定位优化点提供了依据。
以下内容将介绍常见的CPU 与内存 性能采集的基本原理,了解为什么性能采集是“统计值”而不是精确值。
CPU 性能采集基本原理
以CPU 性能Perf采集为例,如下图所示,实线代表某单核CPU 的持续运行所经过的时间,而pid/func1、pid/func2 以及pid/func3 表示在此段运行时间内此单核所经过的函数,当每隔一段时间产生一个中断(箭头处),此单核CPU必然执行于某一具体的函数。对于下图来说,可以产生如下统计结果,根据命中率计算可知,在采集时间段内pid/fun3花费了此核CPU的62.5%。对于一般的程序CPU 中断的间隔一般为100ns,从上述基本原理可知,当CPU 采样时间越大,中断间隔忽略的函数越多,因此CPU 性能采集是统计结果,可能存在误差。
函数 | 中断命中次数 | 占用CPU比率 |
pid/fun1 | 1 | 6.25% |
pid/fun2 | 5 | 31.25% |
pid/fun3 | 10 | 62.5% |
内存性能采集基本原理
与 CPU 性能采集原理不同的是,内存性能数据因为要拿到具体的分配数量,因此内存性能采集的通常做法是将工具集成到内存的分配器中,当语言进行内存分配时,拿到当前的函数调用栈,最终将样本聚合,便可推算出函数的内存分配了。以下代码为GO语言的内置Profiling行为,当开启Profling后,每次功能mallocgc 分配512K大小内存,便触发一次profilealloc函数记录分配行为。
如下图所示,实线代表某单核CPU 的持续运行所经过的时间,而pid/func1、pid/func2 以及pid/func3 表示在此段运行时间内此单核所经过的函数,每个箭头处表示一次内存分配,但由于默认512K记录一次分配行为,因此可以产生如下统计结果,第一次与第二次malloc行为因为分配不满足512K记录大小规则,因此跳该过记录,如将MemProfileRate设置为1,可以完全精确的记录每一个函数的内存分配,但是性能开销带来的成本是巨大的,因此内存性能采集也同样是统计结果,可能存在误差,因此Profling程序一般并不是采用上述512K的固定值进行,而是以512K为平均值的指数分布中随机取一个值,降低误差影响。
函数 | 分配次数 |
pid/fun1 | 1 |
pid/fun2 | 1 |
pid/fun3 | 2 |
为什么需要持续性能分析?
性能采集带给开发者分析程序性能的工具,开发者可以清楚的了解性能采集时刻的CPU 或内存的分布,通过分析这些数据,开发者可以快速定位程序性能瓶颈问题。但现实情况可能更加复杂,应用的部署结构已经从单体结构走向微服务结构,并且随着云化浪潮,部署也存在着多云、多Region、多架构机器等诸多行为。因此宏观的角度分析服务的性能变得更加重要,这也就意味着性能采集多了一个新的维度“时间”,当有了时间维度,性能采集便成为了持续的性能分析,这也意味着分析从单体分析变成了高纬度的对比分析,也让以下场景的性能分析成为了可能。
场景 | 性能采集 | 持续性能分析 |
对比某服务测试环境与生产环境的性能差异 | N | Y |
对比某服务版本1.0 与版本2.0 性能差异 | N | Y |
对比某服务在Arm 服务器与Amd 服务器性能差异 | N | Y |
对比某服务在北京地域与杭州地域服务的性能差异 | N | Y |
...... |
SLS 持续性能数据采集与分析
SLS 持续性能分析为开发者提供开放、一站式性能持续分析平台,目前已经对于Pyroscope 开源SDK 或Agent 完全兼容,后续SLS 持续性能分析会持续拓展接入兼容性,如支持对原生Golang Profile接口的采集或对Datadog Profling SDK 等接入的兼容。
性能数据存在着不同的协议,如pprof、JFR、Tire 等,不同协议对性能数据的承载能力不同,如Tire 协议一般仅承载CPU 性能数据,而pprof 可承载cpu、memory、mutex、goroutines 等多种性能数据,下文将使用基于pprof 协议的 Go 语言样例介绍SLS持续分析的功能。
类型 | Go | Java | NodeJs | Python |
CPU时间 | 是 | 是 | 是 | |
堆 | 是 | 是 | 是 | |
分配堆 | 是 | |||
争用 | 是 | |||
线程 | 是 | |||
实际时间 | 是 | 是 | 是 |
数据探索
在SLS 持续性能分析的数据查询界面,开发者可以选择关注服务性能类别与时间后,整个数据查询探索界面会通过火焰图与表格两种方式显示性能数据,下图展示了Go的一个demo 程序在CPU性能分析下的样例。但对于持续性能分析更重要的是价值是更高维度的数据探索,因此SLS 持续性能分析支持通过动态标签组合满足开发者对性能数据的高纬度探索需求,如下图所示的性能查询条件为进行sls-mall 集群下、test环境、version1版本的性能分析。
对于持续性能分析,时间维度的加入也就意味着可以进行更多的性能数据的对比,在在SLS 持续性能分析探索界面,开发者可以轻松的选择对比性能的时间范围,通过火焰图或者表格方式进行数据探索,如下图为对比Go Demo 程序过去一小时性能与当前性能的差异,通过灰色颜色可以快速得知,服务性能没有明显变化。
- 灰色: 代表性能性能相近
- 红色:代表性能下降,颜色越深代表性能下降越严重
- 蓝色:代表性能提升,颜色约深代表性能上升越多
当然性能对比界面也同样支持利用动态标签组合的方式满足满足开发者对性能数据更高的对比需求,如下图展示了相同服务不同版本的性能差异。
优化案例
小王公司待优化的服务为一个 gRPC服务,在限定资源(CPU限制为250m核,内存限制为50M),小王使用日志方式打印了压测下此服务待优化接口性能,发现QPS 仅仅在30左右。
CPU 优化
- 定位问题
小王将此服务接入了SLS 持续性能分析发现有一个内部库函数regexp.MatchString消耗了应用程序的大量CPU性能。
- 分析问题
小王发现此程序的业务逻辑为计算存储文件行包含输入字符串的数量,使用regexp.MatchString进行匹配,但此行为并未涉及复杂的正则提取,字符串包含操作已经可以满足业务需求,且相比于正则匹配,字符串匹配的算法复杂度更低,因此小王进行了下面的优化。
- 性能对比
小王将此优化版本标记版本为version2,通过SLS 持续性能对比界面分析此次"小" 改动的带来的性能差异,下图展示了 version :1与 version:2(CPU 优化后)的差别,浅蓝色代表部分优化,深蓝色代表全部优化,小王发现经过对正则表达式的优化,上层函数耗时竟然下降77.29%。
- 验证优化
小王再次打开自己最初打印的QPS 统计日志,发现同等资源条件下,程序10次平均QPS 提升到1399左右,接口性能得到接近40倍的性能提升,小王出色的完成了公司提出的降本增效任务。
内存优化
- 定位问题
小王出色的完成了公司降本增效的认为后,公司领导很高兴,提出能不能把程序的内存也优化一下。小王公司的程序为Go程序,GO的内存性能指标分为alloc_objects、alloc_space、inuse_objects以及inuse_space。alloc_*指标为从程序启动到目前分配的大小或数量,可以帮助定位频繁分配对象的方法,降低Go程序GC 压力,inuse_* 方法是内存中存在的对象大小或数量,可以帮助定位内存泄漏等问题。小王继续通过SLS 持续性能分析来分析上述4类指标。小王通过对不同指标的查看,发现服务alloc_space指标存在异常,大量内存分配行为都存在于标准库strings.split函数。
- 分析问题
小王通过对业务逻辑的梳理,基本逻辑为从本地文件读取文件全量数据,之后按行进行切割,接着与输入进行字符串进行匹配比较,按行切割时存在大量小字符串分配,通过slice 偏移量截取字符串对比,可以避免大量小字符串的分配与释放,因此小王进行了如下优化。
- 性能对比
小王将此优化版本标记版本为version3,通过SLS 持续性能对比界面分析此次改动的带来的内存性能差异,下图展示了 version :3与 version:2(CPU 优化后)的差别,浅蓝色代表部分优化,深蓝色代表全部优化,小王发现经过对本次字符串优化,核心函数空间分配下降59.46%。
小王推测内存分配空间的减少也就意味对象分配时间与GC 时间的减少,因此推测本次优化可能还会带来性能的提升,因此继续使用CPU性能对比查看CPU 性能的变化,小王发现CPU 性能确实得到了19.71%的性能提升。
- 验证优化
小王再次打开自己的QPS 统计日志,发现同等资源条件下,验证第二次性能优化的结果,程序10次平均QPS 提升到1840左右,性能再次获得了30%的提升。
优化回顾
上述案例中小王的2次优化,第一次是对正则的优化,第二次是对字符串使用的优化,都是对标准库的使用优化,这样的问题可能也潜藏在每一位开发者的程序中,通过SLS持续性能分析的查询、聚合、对比能力,可以快速的定位应用程序潜藏的顽疾。
展望
SLS性能持续分析基于开放的接入生态与持续性能分析的理念所构建(开放接入部分已在 iLogtail开源),基于SLS 性能持续分析,将为广大开发者提供开箱即用、一站式的的性能观测体验,助力开发者轻松面对多云、多Region、多版本、微服务等场景下的性能分析需求,目前已经发布 部分地域, 欢迎大家试用与交流。在后续的版本中,我们将为开发者提供更为便捷、丰富的性能监控接入渠道,更强大的性能分析体验。
- 更多开源Agent与SDK 兼容,如Datadog 等。
- 更多无需集成SDK 的接入方式,如Golang下的主动抓取采集等。
- 在交互分析上,提供更便捷、性能更高的迷你图划线对比。
- ...
参考文档
Linux下做性能分析:perf
Google-Wide Profiling: A Continuous Profiling Infrastructure for Data Centers
Profiling concepts bookmark_border
What is continuous profiling?
大数据体系一般分为:数据采集、数据计算、数据服务、以及数据应用 几大层次。
在数据采集层,主要分为 日志采集 和 数据源数据同步。
日志采集
根据产品的类型 又有可以分为:
- 浏览器页面 的日志采集
- 客户端 的日志采集
浏览器页面采集:
主要是收集页面的 浏览日志(PV/UV等) 和 交互操作日志(操作事件)。
这些日志的采集,一般是在页面上植入标准的统计JS代码来进执行。但这个植入代码的过程,可以在页面功能开发阶段由开发同学手动写入,也可以在项目运行的时候,由服务器在相应页面请求的时候动态的植入。
事实上,统计JS在采集到数据之后,可以立即发送到数据中心,也可以进行适当的汇聚之后,延迟发送到数据中心,这个策略取决于不同场景的需求来定。
页面日志在收集上来之后,需要在服务端进行一定的清晰和预处理。
比如 清洗假流量数据、识别攻击、数据的正常补全、无效数据的剔除、数据格式化、数据隔离等。
客户端日志采集:
一般会开发专用统计SDK用于APP客户端的数据采集。
客户端数据的采集,因为具有高度的业务特征,自定义要求比较高,因此除应用环境的一些基本数据以外,更多的是从 “按事件”的角度来采集数据,比如 点击事件、登陆事件、业务操作事件 等等。
基础数据可由SDK默认采集即可,其它事件由业务侧来定义后,按照规范调用SDK接口。
因为现在越来越多APP采用Hybrid方案,即 H5 与 Native相结合的方式,因此对于日志采集来说,既涉及到H5页面的日志,也涉及到Native客户端上的日志。在这种情况下,可以分开采集分开发送,也可以将数据合并到一起之后再发送。
常规情况下是推荐将 H5上的数据往Native上合并,然后通过SDK统一的发送。这样的好处是 既可以保证采集到的用户行为数据在行为链上是完整的,也可以通过SDK采取一些压缩处理方案来减少日志量,提高效率。
APP上的数据采集,还有一点比较重要的就是唯一ID了,所有的数据都必须跟唯一ID相关联,才能起到更好的分析作用,至于移动设备唯一ID我在上一篇文章中有详细讲到。
日志收集,还有很重要的一条原则就是 “标准化”、“规范化”,只有采集的方式标准化、规范化,才能最大限度的减少收集成本,提高日志收集效率、更高效的实现接下来的统计计算。
数据源数据同步
根据同步的方式 可以分为:
- 直接数据源同步
- 生成数据文件同步
- 数据库日志同步
直接数据源同步:
是指直接的连接业务数据库,通过规范的接口(如JDBC)去读取目标数据库的数据。这种方式比较容易实现,但是如果业务量比较大的数据源,可能会对性能有所影响。
生成数据文件同步:
是指从数据源系统现生成数据文件,然后通过文件系统同步到目标数据库里。
这种方式适合数据源比较分散的场景,在数据文件传输前后必须做校验,同时还需要适当进行文件的压缩和加密,以提高效率、保障安全。
数据库日志同步:
是指基于源数据库的日志文件进行同步。现在大多数数据库都支持生成数据日志文件,并且支持用数据日志文件来恢复数据。因此可以使用这个数据日志文件来进行增量同步。
这种方式对系统性能影响较小,同步效率也较高。
数据采集本身不是目的,只有采集到的数据是可用、能用,且能服务于最终应用分析的数据采集才是根本。
数据采集是大数据的重中之重啊。现在互联网网页中数据采集最常用的就是网络爬虫了。
爬虫数据采集方法可以将非结构化数据从网页中抽取出来,将其存储为统一的本地数据文件,并以结构化的方式存储。自己做爬虫的话也是需要相当长度时间的,可以试一下前嗅的数据采集软件,支持可视化操作,采集速度快,使用服务器采集数据,一天能达千万条。
看了文章,感觉爬虫采集网页还是挺容易的,对于通过传感器采集,很难搞懂里面的原理,一般都是来做网页爬虫了。用的是foreSpider爬虫软件,还挺好用的。有时候想去采集一些感兴趣的电影信息,小说文章,商铺里的商品信息,图片之类的都可以采集,感兴趣的话,可以去搜一下前嗅官网,可以下载一下他们的软件来用用,我都用了好长时间了,数据量小的话,用他们免费版的就可以了;不过,对于文章里提到的传感器采集,比如人脸识别采集、声音采集之类的,非专业人士应该很难搞懂这些采集方法吧,不过采集工具做好了,我们来用就可以了,也不用太懂他们的原理
- 纯手工采集网络数据,大道至简,效率低不说,费手;
- 数据采集器,网上有很多,但这种方式并不通用,不能完全解决问题,且效率仍旧不高;
- python 爬虫,通过编写爬虫脚本进行网络数据采集,效率极高,写好脚本等着跑就行了,爬外网得挂 vpn,关于爬虫方向的学习我可以给到以下推荐:
你在网上看到的,95%以上的都是爬虫基础,特别是各种营销号,有很多视频,没有更“高级”的东西,包括知乎上你看到的回答,95%以上都是回答一些基础(可能回答的人自己都没进阶搞过爬虫,只是道听途说),基础你随便找资料学就行了,B站视频也很多,大同小异。
进阶主要是逆向,你会发现基本上没有教程,也很少有人讲这方面的东西,爬虫入门简单,深入很难,我推荐你看以下书籍(我认为是必看的):
- 小白未入门阶段 :《Python 编程从入门到实践》第二版,作者 埃里克·马瑟斯(Eric Matthes)
- 爬虫入门阶段:《 Python3 网络爬虫开发实战》第二版,作者崔庆才
- 反爬套路总结:《 Python3 反爬虫原理与绕过实战》,作者韦世东
- 数据产品+数据产品思维:《爬虫实战:从数据到产品》,作者贺思聪
- 爬虫逆向进阶:《 反爬虫AST原理与还原混淆实战》,作者李岳阳, 卓斌;《安卓Frida逆向与抓包实战》作者陈佳林,《 爬虫逆向进阶实战》作者李玺
视频方面,我只推荐进阶,也就是逆向相关的视频:
免费:
- JS 逆向: 《K 哥爬虫》 K 哥的小助理带你由易到难学习逆向
- JS 逆向: 《志远2021全新js逆向教程,学完这套就够了!(全套开源)》
- APP 逆向: 《小肩膀 app逆向百集(105集)》
收费:
- 夜幕出品 JS 逆向: 《JavaScript 逆向系列课》 《JavaScript 逆向高阶课》
- 猿人学: 《爬虫高阶课程》
- 志远和小肩膀 2022 最新的 JS 逆向和 APP 逆向课程,自己在 B 站找购买方式
推荐多逛一下各大论坛:
- 看雪安全论坛
- 精易逆向安全
- 夜幕爬虫论坛
- 穿甲兵技术社区
PS:很多搞易语言的对于逆向很拿手,可以逛逛易语言的一些论坛,重要的是思路,实现的语言无所谓,也可以关注 K 哥公众号,我会分享一些 JS 逆向知识,比较适合新手。
爬虫工具推荐:spidertools
爬虫代理推荐: 快代理(国内HTTP代理)、 bright data(海外HTTP代理)
爬虫工程师的尽头是逆向安全工程师!
大数据的来源多种多样,在大数据时代背景下,如何从大数据中采集出有用的信息是大数据发展的最关键因素。
数据采集是指从真实世界对象中获得原始数据的过程。不准确的数据采集将影响后续的数据处理并最终得到无效的结果。数据采集方法的选择不但要依赖数据源的物理性质,还要考虑数据分析的目标。
表3-1对传感器、日志文件、网络爬虫三种数据采集方法进行了比较。日志文件是最简单的数据采集方法,但是只能收集相对一小部分结构化数据。网页爬虫是最灵活的数据采集方法,可以获得巨量的结构复杂的数据。
根据数据源的不同,大数据采集方法也不相同。但是,为了能够满足大数据采集的需要,大数据在采集时都使用了大数据的处理模式,即MapReduce分布式并行处理模式或基于内存的流式处理模式。四种常用的大数据采集如下。
数据库采集
传统企业会使用传统的关系型数据库MySQL和 Oracle 等来存储每笔事务数据。在大数据时代,Redis、MongoDB 和 HBase 等 NoSQL 数据库也常用于大数据采集。企业通过在采集端部署大量数据库,并在这些数据库之间进行负载均衡和分片,来完成大数据采集工作。
系统日志采集
和物理传感器相比,日志文件可以看成“软件传感器”,许多用户实现的数据采集软件属于这一类。系统日志采集主要收集公司业务平台日常产生的大量日志数据,供离线和在线的大数据分析系统使用。
网络数据采集
网络数据采集是指通过网络爬虫或网站公开API等方式从网站上获取数据信息的过程。互联网的网页大数据采集和处理的整体过程包含四个主要模块:Web爬虫(Spider)、数据处理(Data Process)、爬取URL队列(URL Queue)和数据。
传感器采集
基于传感器的数据采集系统被认为是一个信息物理系统。实际上,在科学实验中许多用于收集实验数据的专用仪器(如磁分光计、射电望远镜等),可以看成特殊的传感器。从这个角度看,实验数据采集系统同样是一个信息物理系统。
众包采集
“众包”出现在2006年,即任务外包给“分布式”的一群人“围观”,这些人被普遍认为是非专家,通过网络登录,这些众包平台可接受和完成任务。将收集数据的任务外包给其他用户来完成,通过大量参与的用户来获取恰当数据。
关于采集工具,可以参考这一篇。
互联网是世界上最大的数据库,越来越多的个人和组织日益倚重互联网数据来学习和决策。典型的应用包括价格情报、品牌舆情、市场调查、零售选品、智能获客、政务舆情、背景调查等等。
采集、分析和融合非隐私公开数据有利于行业发展、数据要素流通和技术进步。
根据 Opimas Research 报告,全球网页挖掘和融合的市场规模大约每年 100 亿美金,其中外部采购支出大约每年20亿美金,并且以每年超过70% 的速度增长。更进一步,以知识图谱为核心的认知智能是更为广阔的市场。
从互联网数据中获得数据和见解是一项基础性的需求,互联网是世界上最大的数据库,但从互联网获得数据从未容易过。
问:爬虫到底有哪些应用场景?
从行业应用场景角度看:
- 认知智能:高精度结构化全体网页,为认知智能提供基础知识图谱
- 情感分析:从社交媒体平台、新闻和评论等数据源提取信息,以量化和解读公司、品牌、产品的声誉,跟踪竞争对手,或者收集政务舆情,及时了解任何可能重要的突发事件
- 价格情报:电商网站更改价格越来越频繁,竞争对手定价和库存监控变得越来越重要。监控竞争对手的定价有助于企业调整自身产品的市价率。品牌商也通过渠道巡检来监控渠道定价,以确保分销商遵守定价政策
- 供应链管理:使用网络数据进行需求预测、销量预测,以帮助管理物流、采购、库存等。譬如帮助电商对产品销量进行预测,从而制定补货计划,优化库存;航空公司监控市场并调整其定价和航线;而食品公司则通过跟踪农产品原产地气候变化,来预测农产品质量并选择供应商
- 市场营销:收集有关竞争对手的信息、识别销售线;从新闻、社交媒体和评论中收集信息并进行分析,跟踪需要客服和支持的问题,并进一步制定产品开发和市场进入策略。网络数据还可用于潜在客户生成,识别可能成为特定服务或产品目标的个人或公司
- 经济与投资研究:从网络数据中生成可分析数据,并通过API 直接交付到投资公司模型,可以近乎实时地推动投资决策。投资公司使用测量移动位置、交通模式、天气、卫星图像、财务报表、宏观经济指标等数据集来帮助制定投资决策。市场数据汇总也被广泛应用于直接投资决策。对一些缺乏行业数据的新兴行业,从网络中获得自身数据指标可能是获得影响未来规划的关键见解的唯一机会
- 风险管理:使用网络数据增强风险管理措施,如对员工、供应商、交易对手进行背景调查以控制风险,或者用于监控地缘政治风险和检测欺诈
从技术角度看:
- 每日采集百万量级电商页面做市场调查和竞品分析
- 采集数千个网站并降低规则失效率
- 采集整个互联网并建立搜索引擎、信息流产品或者知识图谱
- 开发一款供非技术人员用的“数据采集器”
- 架设自己的数据采集公有云
问:网络爬虫是一种什么样的技术?
答:网络爬虫是替代人工从互联网采集数据的技术。不同的数据有不同的获取方式。
- 有些数据可以通过发送最简单的 HTTP 请求直接获得
- 有些数据需要模拟页面访问的上下文场景后,通过 HTTP 请求获得
- 更多的数据则需要通过真实的浏览器访问后才能获得
在解决了“通过编程获取一个网页数据”的问题后,就需要把这个问题规模化和系统化,从而解决实际问题,这包括:
- 连续采集
- 大规模分布式
- 任务调度
- 性能保证
- 数据质量保证
- 系统架构设计
- API 设计
- 高级数据采集语言
- 高级信息提取算法
问:网络爬虫的关键技术有哪些?
网络爬虫在各种语言中都有实现,譬如 Java, Kotlin, Javascript, Python, Go, C++ 等。随着网站变得越来越复杂,页面变动越来越频繁,越来越多的网站由 Vue,React 等技术动态生成,我们建议网络爬虫直接从浏览器自动化工具开始,譬如 Selenium,Playwright,Puppeteer,Crawlee,PulsarR 等。这些工具本身由某一种语言编写,但往往对使用者提供了多种语言绑定。
譬如,Selenium 由 Java 编写,但是提供了 Java, Python, C#, Ruby, JavaScript, Perl, PHP, R, Objective-C, Haskell 这些语言的编程接口;Playwright 由 Javascript 写成,但是提供了 JavaScript, Java, Python, C# 的编程接口。
尤其不建议再用 Requests, Scrapy 等原始工具了,不要陷入花里胡哨、无穷无尽的爬虫对抗中,这种对抗很多时候是一条死胡同,譬如采用动态自定义字体技术,已经可以彻底阻断 HTTP 抓包方式的采集了。
在实际的网络数据管理项目中,数据采集包含以下关键技术:
- 连续采集
- 大规模分布式
- 任务调度
- 性能保证
- 数据质量保证
- 系统架构设计
- API 设计
- 高级数据采集语言
- 高级信息提取算法
问:传统数据采集方案有哪些问题?
目前大家常用的主流的数据采集软件,包括 selenium, playwright, puppeteer 等,不是为数据采集开发的,不适合数据采集;而大家熟知的 scrapy, requests 等,已经越来越不适应现代网页了。
- 现在主流网站常用的反爬手段基本都用了,譬如Cookie跟踪,IP跟踪,访问频率限制,访问轨迹跟踪,CSS 混淆等等。
- 使用基本的 HTTP 协议采集,如 requests, scrapy, jsoup, nutch 等,会陷入无穷无尽的爬虫/反爬虫对抗中,得不偿失,并且未必能解决,譬如说采用了动态自定义字体的站点就不可能解决。
- 使用浏览器自动化工具如 selenium, playwright, puppeteer 等进行数据采集,会被检测出来并直接屏蔽。
- 使用 puppeteer-extra,apify/crawlee 这样的工具,虽然提供了 WebDriver 隐身特性,一定程度上缓解了这个问题,但仍然没有完全解决。
- 上述工具没有解决访问轨迹跟踪问题
- Headless 模式能够被检测出来。云端爬虫通常以 headless 模式运行,即使做了 WebDriver 隐身, headless 模式也能够被检测出
- 其他爬虫对抗问题
即使解决完上述问题,也仅仅是入门而已。在稍稍正式一点的采集场景下,仍然面临诸多困难:
- 如何正确轮换IP?事实上,仅轮换IP是不够的,需要“隐私上下文轮换”
- 如何使用单台机器每天提取数千万数据点?
- 如何保证数据准确性?
- 如何保证调度准确性?
- 如何保证分布式系统弹性?
- 如何正确提取 CSS 混淆 的字段,它的 CSSPath/XPath/Regex 每个网页都不同,怎么解决?
- 如何采集数百个电商站点并避免爬虫失效?
- 如何降低总体拥有成本?
问:如何写一个高效网络爬虫
提升网络爬虫效率首先要做的工作是正确的并行化和分布式,只有正确解决了这两个问题,提升单节点效率才有意义。正确的并行化并不容易,譬如,是否正确解决了隐私上下文轮换问题。
将浏览器渲染作为数据采集的首要方法,可以在数据点规模、数据质量、人力成本和硬件成本之间实现了最佳平衡,并实现最低的总体拥有成本。浏览器渲染一个商品详情页,可以拿到超过 100 个重要字段,涵盖站方特意延迟加载的字段如价格信息;而通过简单 HTTP 拿接口,每接口可能只有十来个字段,最后还有自行融合。
通过优化,如屏蔽不相关的资源文件,浏览器渲染的性能可以与传统的单一资源采集方法相媲美。
在需要同网页交互的场景中,所有交互操作,譬如滚动、打字、屏幕捕获、鼠标拖放、点击等,也需要优化。
如果需要的数据可以通过单一接口获取,譬如可以通过某个 ajax 接口返回,可以调用单一资源采集方法进行高速采集,单一资源采集方法使用简单的 HTTP 网络协议进行采集。
在提升网络爬虫效率的时候,往往每天需要采集数以百万计的网页,或者数以亿计的数据点,此时,一个至关重要的关联问题是,如何保证数据准确性和调度准确性。如果数据不准确,调度出现错误,采下来的数据重复、失效、过期,那么性能再好也没有意义。
随着网站变得越来越复杂,页面变动越来越频繁,越来越多的网站由 Vue,React 等技术动态生成,建议网络爬虫直接从浏览器自动化工具开始,譬如 Selenium,Playwright,Puppeteer,Crawlee,PulsarR 等。尤其不建议再用 Requests, Scrapy 等原始工具了,不要陷入花里胡哨、无穷无尽的爬虫对抗中,这种对抗很多时候是一条死胡同,譬如采用动态自定义字体技术,已经可以彻底阻断 HTTP 抓包方式的采集了。
很多人认为Requests, Scrapy 等原始工具的具有效率优势,这并不正确:
- 对单一资源进行过于频繁的访问,会导致目标站点崩溃,从而带来法律风险
- 对单一资源进行过于频繁的访问会触发目标站点的反爬机制
- 对现代浏览器进行优化和和合理配置,譬如屏蔽不相关资源,其效率可以和原始 HTTP 效率媲美
- 其他效率相关弊病
问:爬虫的难点到底在哪里?
答:总体拥有成本。
爬虫的难点在于数据规模、数据质量、综合性能、人力维护成本、硬件支出等,这些难题构成了总体拥有成本的难题。
具体来看:
- 数据能采集到(难)
- 数据质量和调度质量保证(难难)
- 运行性能和机器成本(难难难)
- 业务和数据分析(难)
- 大批量站点的信息抽取(难难难)
- 构建知识图谱(难难难难)
谈几个具体一点的难点:
- 如何正确轮换IP?如何设置触发条件?事实上,仅轮换IP不够,需要“隐私上下文轮换”
- 如何使用单台机器每天提取数千万数据点?
- 如何保证数据准确性?
- 如何保证调度准确性?
- 如何保证分布式系统弹性?
- 如何正确提取 CSS 混淆 的字段,它的 CSSPath/XPath/Regex 每个网页都不同,怎么解决?
- 如何采集数百个电商站点并避免爬虫失效?
问:如何合理使用「网络爬虫」?
采集、分析和融合非隐私公开数据有利于行业发展、数据要素流通和技术进步。
行业内几乎每家大数据公司都高度依赖采集和分析其他网站的数据,如果爬虫全部违法,大数据这个行业也就不存在了。国内各大招募网站每天活跃的爬虫工程师近 1000 个,如果爬虫全部违法,这些公司的业务都会受到严重影响,甚至直接倒闭。
这里我们整理了一份爬虫的应用场景、核心难题和解决方案,爬虫的常见问题和学习建议,希望能够有帮助:
希望这个回答对你有帮助。
报表数据采集、统计汇总、数据分析是管理的重要组成部分,但对于很多企业来说,复杂的组织架构,不同的分子公司所用的业务系统技术、结构可能不尽相同。
- 如何做到统一的结构化数据采集?
- 如何做到数据高效、高质量的采集、快速的汇总与存档?
- 如何灵活、快速的实现,复杂多变的中国式报表采集需求?
- 如何在采集过程中严格把控数据质量?
- 如何在汇总、分析、挖掘报表数据中,快速地为领导提供正确可靠的决策依据?
是每个企业在设计数据采集平台时都需考虑的。
i@Report是亿信华辰基于Web的数据采集汇总平台,经过十余年的打磨,万千项目的锤炼,i@Report越发成熟。该平台集报表模板定制、数据采集、数据报送、汇总查询等功能为一体,具有良好的通用性、灵活性、可操作性和可扩展性,能帮助企业实现高效数据采集。
一、灵活的纯web设计器
i@Report5.3采用EUI框架构建出纯web设计器,用户不需要下载安装插件,脱离传统的插件设计模式,但同时兼容之前插件设计的任务。正因为无需插件设计,现在的i@Report5.3也能在chrome等非IE内核浏览器上进行填报任务的设计。
1、支持丰富的表样
通过设计器,可制作各种类型的报表,如基本表、变长表、中国式复杂报表、套打表等;同时拥有丰富的单元格编辑风格,可灵活设置各单元格样式,包括:文本、数字、图片、日历、附件、下拉框、下拉复选框、输入复选框、单选按钮等。
基本信息表↓:
变长表↓:
套打表↓:
2、运算灵活定义
i@Report公式的定义采用与Excel一致的公式语法,方便用户快速上手。
- 支持七大类150多个系统函数,允许用户自由扩展;
- 支持表内表间公式,支持跨任务取数公式,并支持按条件计算;
- 支持跨报表期取数公式,轻松处理类似上期、去年同期、本年累计等历史指标;
- 利用智能的公式定义向导,通过鼠标点击、拾取的方式可完成非常复杂的公式的定义,还可以整行整列进行批量定义公式。
3、用户体验更便捷
新版本的设计器,采用纯web的设计风格,界面更清晰。报表和表元属性,由原来的弹框设置,更改为右侧属性设置,让用户在设计报表时更加方便快捷。
二、丰富的数据库接入类型
i@Report5.3提供了丰富的数据库类型接入,包括主流的关系型数据库以及分布式数据库,能将业务系统数据对接到平台中,提供后续建模分析使用。数据库类型包括:Mysql、Oracle、SQL Server、DB2、GBase、PetaBase、Essbase等,同时也支持通过接入其他数据库驱动的方式自定义数据库。
三、PC门户批量设置
PC门户新增批量设置门户功能,可批量给用户设置登陆后的访问门户,节省挨个给单用户设置的时间。
四、支持集群部署
i@Report5.3支持了基于Redis的集群部署,进一步提高了i@Report平台的高可用性,满足多并发、高负载等应用场景。
五、工作流审批
众所周知,很多公司的填报业务都是多级的,由下级填报后提交给上级,上级对下级的数据进行验证和处理之后再填报给上级,这就是一个简单的审批流程。
i@Report内置多种通用流程,包括层层审批流程、直接上级审批流程等,同时用户也可根据流程配置界面完成任何个性化流程的定制。系统还支持通过站内消息,邮件短信等通知用户办理流程,以便业务人员能够关注流程的实时进展。
六、多样的数据采集方式
数据填报用户通过web浏览器进行数据的采集录入:填报界面类似EXCEL,由一个个单元格组成;填报方式与填写EXCEL表相类似,支持横纵冻结窗体、快速录入、自动触发计算、缩放、复制、粘贴等操作。
同时i@Report还支持导入EXCEL或者文本文件的数据。
i@Report也提供自动初始化的接口,可以从提供的业务系统接口中提取数据,并定时初始化,避免用户重复录入数据的困扰。
七、支持数据检验
i@Report可轻松设置对录入数据的有效性检验,提高数据质量,不仅为报表制作者节省了大量的时间,也为最终的填报人提高了工作效率。
以上只是展现了i@Report部分功能,还有很多细节没有介绍,更多惊喜等着你们使用时来发现!欢迎戳下方链接试用↓↓↓
这篇绝对是我分享过的最清楚、最全的一篇教程!能够解决大部分人的数据采集及分析需求!
实用、简单,尤其适合excel大户、办公族、业务人员,或者不会编程、不懂数据分析理论的技术小白……
图文、动图、视频都有,包你学的明白!
01 点对点的采集:直接采集数据
所用工具:表单(协同收集+隐私保护)
首先想好需要收集哪些数据,添加字段制作表单。
表单创建方式有两种,一种是「创建空白表单」,根据自己的需求,自定义添加字段,操作步骤如图:
如果有部分数据已经存储在Excel中,可以直接选择「从Excel创建表单」,配置好字段标题名称即可一键导入,操作步骤如图:
表单设计主要分为3个步骤:
- 添加字段,把需要收集哪些数据都列出来做成字段。
- 配置数据联动、公式、选项关联设置等等功能,使得数据收集过程更加方便。
- 设置表单属性。
收集上来的数据,存储在表单后台中,在数据管理中可以看到所有的数据,拉出一个仪表盘即可一键生成数据分析报表。
如何设计表单详细看这篇: 想制作一个信息采集表单,可以推荐教程吗?
02 点对线的采集:采集流程中的数据
所用工具:流程表单
当表单需要多方参与、按一定顺序提交数据时,那么上一步的表单创建时,就要选择「流程表单」来创建。
比如,报销数据采集的步骤:链接发给各部门——提交采集表——财务审核确认——汇总处理完成。
所以在“流程设定”里,我们需要提前设置好提交流程的节点、负责人和数据流转的路径。只要数据提交,就会进入流程,按照设计进行流转。
ps:表单与流程表单可以相互切换
普通表单切换为流程表单后需要重新设置流程;
流程表单切换为普通表单后,则流程将失效,数据提交后将不再按设定流转。
03 进行权限设置,限制采集群体
所用工具:权限管理
表单设计好以后:
可以发布给成员,并分配不同的数据处理权限(直接提交、管理全部数据、查看全部数据、管理本人数据)。
也可以点击公开发布,将采集表的链接/二维码发出去,进行数据采集。或者设置“凭密码填写”,只有输入正确密码,才能打开采集表。
04 数据管理并清洗
我们采集的对象可以根据我们分配的权限,去查看全部或部分数据;
我们自己则可以在后台数据管理处查看所有提交上来的数据,并直接可以数据进行筛选、批量导入/导出、删除、修改等操作,进行数据的快速清洗。
对大规模数据/多级的数据进行快速计算
如果之前了解过大数据/数据分析,一定听说过数据仓库这个词。
我们可以把数据工厂理解为数据仓库技术中的ETL工具。
ETL ,用来描述将数据从来源端经过抽取、转换、加载至目的端的过程。
它的好处是什么呢?
就是可以快速计算很多维度,比如每月计算工资和绩效,可能包含很多影响因素,但每个月都要手动把这些因素一一算好,再盘起来,非常麻烦且耗时。
但是在数据工厂设置好计算流程后,之后只需要采集好每个维度的数据,数据自己就能自动进入数据工厂进行加工计算,这样就完全省掉了每月的计算工作。
使用方法之前介绍过:
简言之,数据工厂是加工和处理数据的工具,通过数据工厂处理、计算得到的数据,可以用仪表盘(仪表盘下一节就会说到)进行数据分析。
数据分析并展示
所用工具:仪表盘
在表单中收集得到的数据,可通过仪表盘来进行查看、分析和处理。仪表盘中提供了多种样式的图表。比如:
- 通过明细表、数据透视表等查看表单数据的明细和汇总;
- 通过柱形、折线、图形、雷达图等可以对数据进行处理,显示出数据的发展趋势、分类对比等结果;
- 通过饼图体现数据中每个部分的比例……等等
把做好的仪表盘发出去,别人也可以看到你的统计分析结果。
下面教一下怎么用仪表盘统计分析数据:
按照需求,添加对应的图表组件,比如:统计表、明细表、数据管理表格、日历组件等等。
添加好图表组件以后,我们就可以对整个数据分析看板进行布局调整,再明确一下打开的步骤:
新建仪表盘 >> 数据组件 >> 统计表/明细表/数据管理组件/日历组件
数据分析的仪表盘就做好了:
总结一下
- 通过表单来收集、管理数据;
- 通过仪表盘来展示、分析数据;
- 通过把表单、仪表盘发布出去,大家可以打开填写/查看数据;
- 通过设置数据权限,实现更精细的分享、采集
是不是很简单?记得关注 @简道云 ,分享更多高效办公小技巧!
文中数据采集所用工具:
相关阅读:
如何在微信进行Excel在线多人编辑?
扫描二维码填写信息生成表格怎么弄?
数据采集的设计,几乎完全取决于数据源的特性,毕竟数据源是整个大数据平台蓄水的上游,数据采集不过是获取水源的管道罢了。
一、大数据环境下的数据处理需求
大数据环境下数据来源非常丰富且数据类型多样,存储和分析挖掘的数据量庞大,对数据展现的要求较高,并且很看重数据处理的高效性和可用性。(点击读懂大数据处理:大数据处理架构系列三:原来如此简单,HADOOP原理解读)
二、传统大数据处理方法的不足
传统的数据采集来源单一,且存储、管理和分析数据量也相对较小,大多采用关系型数据库和并行数据仓库即可处理。
三、大数据采集
任何完整的大数据平台,一般包括以下的几个过程:(如果对大数据生命周期认识不够清晰,可参考还不懂什么是大数据?大数据的生命周期告白)
数据采集–>数据存储–>数据处理–>数据展现(可视化,报表和监控)
大数据生命周期
其中,数据采集是所有数据系统必不可少的,随着大数据越来越被重视,数据采集的挑战也变的尤为突出。我们今天就来看看大数据技术在数据采集方面采用了哪些方法:
1、离线采集:
工具:ETL;
在数据仓库的语境下,ETL基本上就是数据采集的代表,包括数据的提取(Extract)、转换(Transform)和加载(Load)。在转换的过程中,需要针对具体的业务场景对数据进行治理,例如进行非法数据监测与过滤、格式转换与数据规范化、数据替换、保证数据完整性等。
2、实时采集:
工具:Flume/Kafka;
实时采集主要用在考虑流处理的业务场景,比如,用于记录数据源的执行的各种操作活动,比如网络监控的流量管理、金融应用的股票记账和 web 服务器记录的用户访问行为。在流处理场景,数据采集会成为Kafka的消费者,就像一个水坝一般将上游源源不断的数据拦截住,然后根据业务场景做对应的处理(例如去重、去噪、中间计算等),之后再写入到对应的数据存储中。这个过程类似传统的ETL,但它是流式的处理方式,而非定时的批处理Job,些工具均采用分布式架构,能满足每秒数百MB的日志数据采集和传输需求
3、互联网采集:
工具:Crawler, DPI等;
Scribe是Facebook开发的数据(日志)收集系统。又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,它支持图片、音频、视频等文件或附件的采集。
爬虫
除了网络中包含的内容之外,对于网络流量的采集可以使用DPI或DFI等带宽管理技术进行处理。
4、其他数据采集方法
对于企业生产经营数据上的客户数据,财务数据等保密性要求较高的数据,可以通过与数据技术服务商合作,使用特定系统接口等相关方式采集数据。比如八度云计算的数企BDSaaS,无论是数据采集技术、BI数据分析,还是数据的安全性和保密性,都做得很好。
数据的采集是挖掘数据价值的第一步,当数据量越来越大时,可提取出来的有用数据必然也就更多。只要善用数据化处理平台,便能够保证数据分析结果的有效性,助力企业实现数据驱动。
说到这里,简单说下我们公司的服务:
卖家数据分析系统,数据迁移系统;通过针对电商卖家的业务分析需求,提供从采集、建模、存储、分析、智能应用的全流程数据驱动解决方案,帮助企业驱动业务决策。
如果你有数据方面的需求,欢迎过来找我们
可以采集一些社媒平台上的互动数据用做分析:
如何高效解决临床数据采集管理?
近年来,临床试验、药物研发、药物试验、专病数据库项目增速较快,但传统的临床数据采集、管理和分析没有一体化平台支撑,一个单位的临床研究数据库种类又繁多,没有通用化平台统一数据库;并且临床研究与随访案例数据积累难,适用专业工具少;数据采集方式更是效率低,多中心研究流程不规范,无数据来源标识,无法支持数据溯源、复用等等;为提高临床试验数据采集质量,减轻数据搜集的难度以及录入的工作量,各大医院均通过采用电子数据采集管理模式,设计和部署相应的网络架构及其软件系统,并与医院信息系统进行无缝对接,来提升医院临床试验项目数据质量及管理水平。建设统一电子数据采集系统(含随访系统)将具备比传统采集流程模式更突出的优点和强大的生命力。
设计目标
多中心临床研究数据采集管理系统旨在以临床应用为导向,以信息化建设作为突破口和有力支撑,加强临床科研资源共建共享,推动大数据资源的整合利用,做到临床科研过程规范协同,缩短临床研究周期,提高科研工作者的科研效率,实现资源统一维护、项目全局掌控、账户统一管理,规范临床研究的数据管理和过程管理,全面提高医院的临床数据采集质量、管理水平和科研创新能力。
功能介绍
临床数据采集管理系统是一种基于网络的用于临床研究数据标准化、结构化采集和管理的系统,支持多中心协作模式。受试者和研究人员可通过PC端或移动端快捷实现信息数据录入、采集等,同时支持与医院信息系统数据的对接抓取。临床数据数据采集系统操作友好、流程规范、符合行业标准。信息化系统通过多个维度保障临床数据准确、完整、可靠,为后续临床研究提供高质量的数据。
应用场景
1 . 临床科研项目数据收集与管理:临床课题、临床试验等临床病历数据的规范化采集,为后续的数据分析数据挖掘,提供可靠的数据支持。
2 . 临床随访管理:支持手机端随访,根据随访日期,定期想患者发送消息通知,提高患者的依从性,同时减轻临床医生的工作量。
3 . 构建专科专病数据库:整合单病种和多病种的临床和组学数据,有效解决当前研究项目中存在的问题和痛点。
4 . 科研院所、药厂和CRO:新药研发、药物试验、流行性病学调查、群体性研究等数据的电子化和规范化管理
关注启氪医学
了解更多大数据在转化医学研究中的应用进展
公众号 | QKYX2021
微信小助手 | BIO-IT_community
企业官网 | https://www.cloudna.cn/