icon2

2.2 内部数据收集

爬虫通过收集互联网每天不断产生新数据,能很好地帮助我们了解外面的世界。有时候,我们也需要关注公司和企业内部产生的数据,这些信息可能会有更高的商业价值。相对于互联网,内部数据的产生方式和时效性会有所不同,因此收集模式也会有所差异。首先,互联网上的数据分散在Web世界的各个角落,每时每刻都会有新的信息源诞生或消亡,没有一个全局的“地图”可供参考,因此只能依赖爬虫不断地行走和探索来将这个“地图”逐步绘制,颇有探索新大陆的意味,这也是链接获取策略非常关键的原因。而对于内部数据,我们几乎无须考虑这个问题,无论是网站顾客的访问日志,还是公司业绩的销售数据,都会按照既有规划,存放在指定的位置,因此不会涉及链接的分析和获取策略。不过,从及时性的角度来看,内部数据的收集面临着更大的挑战。除了新闻、博客等特殊场景,网络爬虫的应用一般不会要求其进行快速处理,更适合于大规模的离线存储和事后分析。而内部数据极有可能关乎企业的整体运营和表现,是各种核心业务指标的分析来源,因此大多数情况下要求有一定的实时性保证。

也正是如上所述的主要差异,决定了内部数据收集的工作模式有所不同。首先我们来看收集的模型,内部数据的收集主要分为推送(Push)和拉取(Pull)两大类。两种模式都有各自的优缺点。如果选用推送模型,那么数据的实时性无疑是比较高的,不过数据收集的容量必须要大于高峰期数据产生的规模,否则如果生产源主动推送过来的数据不能得到及时处理,将会带来更多更复杂的后续问题,其弊端就会突显。如果选择拉取模型,主动权则掌握在收集端,收集的模块可以根据自己的节奏拉取数据,高峰期产生的海量数据会在一段时间内被慢慢地消化。如此一来,只要保证收集的能力高于数据产生的平均值就足够了。当然,这样的弊端是处理延迟明显增加了。图2-7和图2-8分别展示了这两种模式。在高峰期,推送的数据量可能过大,因此推送的模式中常常需要加上队列,进行异步处理,以达到缓冲的效果。图2-7也包含了这一模块。

图2-7 推送的收集方式

图2-8 拉取的收集方式

“大宝,你觉得这种站内数据的收集,可以怎样运用呢?”这次小明主动发问。

“啊哈,这个难不倒我。我们的创业一定是面向终端顾客的,那么他们在网站上的行为一定是数据分析的关键线索。所以,设计一套用户行为日志的跟踪和存储系统是非常重要的。这里的站内数据收集模块作为分布式日志的整合是再贴合不过的啦!”