Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【文智背后的奥秘】系列篇:海量数据抓取

【文智背后的奥秘】系列篇:海量数据抓取

作者头像
文智
修改于 2017-06-19 11:29:40
修改于 2017-06-19 11:29:40
11.8K2
举报
文章被收录于专栏:文智的专栏文智的专栏

大数据已经是个非常热门的话题,文智平台正是基于大数据的背景,利用并行计算系统和分布式爬虫系统,结合独特的语义分析技术, 一站式满足用户NLP、转码、抽取、全网数据抓取等中文语义分析需求的开放平台。现有的研究、工程应用方向基本上都是围绕着大数据的存储、计算等方面展开,但是对于一个基础环节——数据获取却很少有相关的介绍。本文重点围绕如何获取垂直海量数据展开讨论。

一.引言

数据的作用不言而喻,在各行各业中,分门别类的数据为用户的在线生活体验提供了基本的素材,附近的餐馆、即将上映的电影、最近热门新闻等等能够涵盖我们生活的方方面面。同时所有的这一切也成就了今天在各个垂直领域诸如大众点评、豆瓣、今日头条等专业的公司。具体到搜索业务来说,无论是多么优秀的架构、精准的算法,最终也是需要依赖完备、准确、及时的数据作为落地基础。

从搜索业务来看,数据的价值主要体现在如下几个方面:

  1. 直接提供搜索数据源。海量的数据为检索提供了必不可少的素材。为此数据工作的一个基本目标是数据完备性。完备性可以从两方面来理解,一方面是实体本身的完备,是0和1的关系,这是刚性需求,例如你搜索《来自星星的你》,如果没有这部片子,那么结果显然不能满足用户需求;另一方面是实体内部信息的完备,例如《来自星星的你》如果缺少了演员字段,那么你搜索“金秀贤”的时候可能依然得不到想要的结果。另外要提的一点是完备性通常还对时间有约束,热点资讯、突发事件等如果不能在第一时间呈现,那么对于用户来说都是个硬伤。
  2. 改善相关性质量。干净、精确的数据可以使得在相关性计算阶段减少歧义,改善召回品质,互联网中的数据鱼龙混杂,各个网站的水平也是良莠不齐,不做去噪直接使用的话往往会适得其反。通过高质量的数据补充,对最终结果的排序也有良好的辅助作用。例如豆瓣的影评分数、热度因子可以在视频搜索中辅助结果排序,并且可以改善数据刚上架时由于点击量缺失造成排序上不来这种冷启动的过程。
  3. 丰富搜索产品特性,满足搜索直达需求。当数据完备、及时、准确之后就可以对数据做关联聚合,在这个时候超越文本本身的各种语义特征、知识关联等一些高阶应用相继涌现,大家常常听到的Google的Knowledge Graph、Facebook的Graph Search以及百度知心搜索等都是建立在这一个基础之上。将散落在互联网上碎片化的知识整合起来形成直观答案显然是一种更“懂”你的方式。如图1,搜索王菲老公的体重,知识图谱搜索可以直接输出想要的结果。

图1、搜狗知识图谱搜索结果

总体而言,数据获取工作主要围绕快、准、全三个要素以及一个高阶的关联需求展开。本文重点分析数据如何发现、抓取、更新等方面做一个介绍。

二.数据发现

互联网中的数据良莠不齐,如何从纷繁复杂的互联网中发现有价值的数据是一个有趣的问题。通常数据发现的过程中存在几个难点:

  1. 数据海量,无法遍历穷举;
  2. 鱼龙混杂,需要甄别出高价值的数据;
  3. 存在死链、无效参数、作弊、陷阱等页面使得数据获取的过程中存在各种坑。

问题3这里我们需要结合不同的场景做一些不同的策略,一般在目标对象很清晰的情况下可以通过人工手段做一些规避,因此这里不展开讨论。我们重点讨论1和2这种海量网页中发现高价值数据的问题,有了这个清晰的目标后,接下来就转换为另外两个问题:

  1. 从哪个网站获取?
  2. 如何得到这个网站内有价值的链接?
问题1:如何获取有效站点?通常有下面几个办法:
  1. 垂直榜单数据,一般领域内的热门站点都会存在于各大垂直榜单数据中,以视频站点为例,可以监控类似类似 www.hao123.com 上的垂直分类数据做提取收集

图2.垂直榜单数据

  1. 关键字提取,通常可以利用关键字到综合搜索引擎(google、百度等)中获取。这里有个问题就是关键字如何获取,一方面可以垂直引擎中的零结果的关键字或者其他低CTR关键字,另一方面可以利用已经积累的数据构造,例如想要获取音乐铃声类的站点,可以以“最炫民族风 铃声”构造出特定特征的关键字。

图3、关键字获取

  1. 同类垂直综合站点中爬取,以获取新闻站点为例,可以到 http://news.baidu.com 中将其中的链接抽取汇聚成特定的一些站点。

图4、综合类站点页面

问题2:如何从网站内得到高价值的链接呢?

一般的url都有一些显著特征,通常可以利用前面的方法2,利用大量的query到综合搜索引擎中做site检索获取大量同站点内url,这里基于一个假设就是搜索引擎能召回的数据都是亿万链接中尽量有价值的展现给用户,召回的结果已经融合了用户点击、数据本身质量、站点权威等因子在这里,是一个综合权威的结果。得到同站点url后我们可以分析其特征,对于一些显著特征占比的url可以认为是高价值链接的特征,例如百度百科http://baike.baidu.com/subview/(d+)/(d+).htmhttp://baike.baidu.com/view/(d+).htm 类似这种特殊的片段。在得到高质量的特征的url后可以对库内已经抓取的数据做链接分析,反转父链子链关系汇聚出一些能产生高价值数据的父链作为种子持续发现高价值数据。图5展示了通过库内链接关系可以分析出http://news.163.com/latest/作为一个高质量种子页持续发现高价值数据。

图5、高质量种子页面

三、数据抓取

前面我们介绍了如何获取有价值的url,得到url后通常需要将其抓取下来做后续的处理,如果量小可以使用curl库或者wget直接搞定,这里面临两个比较大的问题:

  1. 速度如果控制不好会导致被目标站点封禁;
  2. wget或者直接构造http请求只能获取到静态页面,对于动态页面只能获取到原始的一些js代码。

为此,我们需要一种爬虫引擎能够优雅、柔性的抓取,同时尽可能模拟浏览器的行为,使得抓取的结果能尽可能的完整。对于问题1可以有两种办法:

  1. 有效的压力控制,这里的压力是指单位时间内对目标站点的访问量,一是压力的计算需要根据对方站点规模(参考alexa排名)、pv量以及当前爬虫的规模做一个适当的计算,同时可以根据不同时间段做合适的调整,例如晚上通常目标网站的pv小我们可以适当提高我们抓取压力;
  2. 提高出口代理,尽量复用出口ip,由于外网ip的资源非常珍贵,需要提高出口ip的管理,按照运营商、地域、ip段进行分散管理,同时可以从外网获取一些公用的代理地址做补充。

对于问题2,则通常需要模拟浏览器的行为,研究浏览器js的解析、运行的一些行为,通常可以研究webkit做一些ajax异步拉取的填充,使得抓取的页面尽可能的和浏览器中访问看到的一致,这里并不展开webkit引擎的开发使用。

在回答了前面这两个问题后,介绍我们目前爬虫引擎的一个基本结构,主要由以下几部分组成:

  1. access:接入模块,主要用于屏蔽多业务入口,在这里主要做屏蔽多业务入口,对外屏蔽后台各种处理逻辑,同时将url归一化后按照子域hash到对应的lcs模块中处理;
  2. dns server和robots server:主要是存放请求dns解析的结果和robots解析的结果,采用key-value 的存储方式加上LRU淘汰策略,另外后台有逻辑定期更新。
  3. lcs:引擎核心控制模块,控制了url下发的速度,lcs在收到请求后会先请求dns和robots,用以获得目标网站ip以及是否在robots范围内允许下载,对允许下载的url送入到排队队列中进行排队,同时对上游access发送的超额url做过载截断,使得系统满足压力控制,同时在这里对排队长度做一定的控制,降低排队时长,使得系统可以尽量的满足实时抓取的需求。
  4. cs:纯粹的抓取模块,负责处理抓取中存在的各种问题,例如死链、跳转、压缩解压、chunck接受等问题,同时带有webkit的解析引擎会负责模拟浏览器行为对动态页面做解析抓取。
  5. 主控master:负责各个模块心跳检测,配置下发等一些控制模块

整个系统是一个完全无状态设计,尽量多逻辑做简单,除了一些系统内必备的重试之外其余的出错尽量在上层做重试。

图6、爬虫引擎结构

四.数据抽取

有了抓取的数据之后需要对原始网页中的信息进行有效信息的加工提取,源于部门多年技术积累,我们对爬取的数据可以做两类抽取:

1.基于机器学习+规则实现的通用抽取方案,该方案通过预处理、Dom建树和css渲染等过程先对html进行dom解析,之后根据事先训练好的模型对网页进行分型操作,例如识别出新闻、论坛、小说等网页结构,最后根据文本长度、文本位置、标签名称等特征对网页进行分块抽取得到相关的信息。该方法是一个通用的解决方案,主要能够实现标题、正文抽取,网页结构分类等一些基础的抽取需求。对于一般常见的抽取服务即可满足需求。

图7、通用抽取部分抽取结果

2.基于url模板的结构化抽取方案,前面基于机器学习的方案只能满足通用的、相对粗糙的信息提取,无法对精准的字段做抽取。为此我们提供一种精确到字段的结构化抽取的方法,该方法的主要思路是事先配置好需要抽取内容的模版(模版可以是正则表达式或XPATH),然后基于html进行精确的模版匹配,最后将匹配结果输出即可。这里主要的难点在于xpath的配置的便捷性以及后续一些噪音的处理过程,这里不再展开赘述。

图8、结构化抽取结果

五.数据更新

通过前面的步骤我们可以完成数据的发现、抓取到入库,通常这个时候已经可以满足使用需求,但是对于影视类、知识类等数据常常是在更新变化的,对于此类数据为了保证数据的时新性、权威性需要进行不断的更新。更新的难点通常还是由于库内的数量巨大,如果需要全量短时间内更新的话在现有的资源规模基本上难以实现,通常主流的办法都是按照一定的策略做选取,选取出候选更新集做更新,之后再同步到全量数据集合中。

图9、数据更新

选取策略通常需要结合不同的业务特性做不同的策略。以视频为例,通常视频的剧集更新都是在一定的时间范围,国产剧集一般是每天凌晨24点,美剧则是周一周二,综艺则是周六周日。为此每次新抓取的数据都记录一个更新时间,通过分析库内连续剧集更新时间我们可以推断出下一次更新的时间,那么我们可以经过一轮大的选取,从全量数据中选取出当天可能会更新的数据,对这一批量小的数据进行更新。

图10、视频更新策略

另外对于一些剧集,各大视频播放网站正在热播的数据则需要做到分钟级别的更新,一般这种量比较小,但是由于热度很高,所以其更新频率需要做到更高,为此对于榜单数据,我们通过分析抓取各垂直站点的热门榜单及分析微博数据,得到热门资源列表。

图11、榜单数据

更新则主要是体现在两个方面:一是页面发生变化,例如字段发生更新等情况;二是页面失效,变成死链。页面变化更新通常例如电视剧追剧、app应用版本的升级相应的内容发生变化。一般这里重新走一遍之前结构化抽取的流程即可。对于页面失效、死链这种可以从页面展现形态区分为页面级死链和内容级死链。页面级死链可以通过http返回码404直接识别。对于内容级死链我们通常有两个步骤同步进行验证:

  1. 死链特征提取,通过分析出死链样本学习出一定死链特征模型
  2. 竞品交叉验证,例如古剑奇谭如果检测到风行这个站点死链,那么可以到风行、soku、百度这些视频站点进行搜索比对,做一次竞品间的比对。

通过前面这两个步骤基本可以完成一轮失效检测。为了进一步修正模型,提高失效置信度,我们外加了一层人工抽样审核,并且将结果反馈到模型中,指导下一轮迭代运行。

图12、失效检测

六.总结

总体而言,对于一个垂直的数据获取平台我们构建了如下的一个流程,主要分为下载发现、离线存储、抽取清洗三大块。调度发现包括了前面提到的页面发现、数据抓取、压力控制等内容,抓取后的数据主要由tbase、cfs等存储介质进行存储,之后我们有一套结构化抽取平台和通用抽取平台对数据进行规整、关联聚合形成独立供业务使用的结构化数据

图13、垂直数据获取流程

数据抓取平台是我们一个基础平台,后续我们也会开放出相应的服务,并且持续对体验做优化,希望我们的服务能够更广泛的应用,为业务提供更大的价值。

评论
登录后参与评论
2 条评论
热度
最新
种子页面,没太明白
种子页面,没太明白
回复回复点赞举报
?
?
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
舆情监控系统爬虫技术解析
之前我已经详细解释过爬虫在系统中的角色和技术要点,这次需要更聚焦“如何实现”这个动作。
华科云商小徐
2025/06/04
1380
【 文智背后的奥秘 】系列篇:结构化抽取平台
随着大数据时代的到来,一个大规模生成、分享、处理以及应用数据的时代正在开启。如果能将互联网上异源异构的非结构化或半结构化数据转换为更易处理的结构化数据,可以极大的降低获取数据的门槛,为信息检索和数据挖
文智
2016/09/29
3.8K0
【 文智背后的奥秘 】系列篇:结构化抽取平台
python爬虫学习:爬虫与反爬虫
Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,欢迎前来领取!
python学习教程
2019/07/10
4.2K0
python爬虫学习:爬虫与反爬虫
【 文智背后的奥秘 】系列篇 : 分布式爬虫之 WebKit
本文介绍了一种基于Qt的Webkit框架实现的浏览器方案,该方案可以加载和渲染网页,支持JavaScript等脚本语言的解析,实现了对网页的爬取和模拟点击等操作。该方案具有高度可扩展性和可定制性,可以广泛应用于各种不同的应用场景。
文智
2016/10/11
4.7K0
【 文智背后的奥秘 】系列篇 : 分布式爬虫之 WebKit
python爬虫(一)_爬虫原理和数据抓取
本篇将开始介绍Python原理,更多内容请参考:Python学习指南 为什么要做爬虫 著名的革命家、思想家、政治家、战略家、社会改革的主要领导人物马云曾经在2015年提到由IT转到DT,何谓DT,DT即数据技术,由数据在推倒人们的衣食住行,当今时代是一个大数据时代,数据从何而来? 企业产生的用户数据:百度指数、阿里指数、TBI腾讯浏览指数、新浪微博指数 数据平台购买数据:数据堂、国云数据市场、贵阳大数据交易所 政府机构公开的数据:中华人民共和国国家统计局数据、世界银行公开数据、联合国数据、纳斯达克
用户1174963
2018/01/17
3.2K0
python爬虫(一)_爬虫原理和数据抓取
聊聊搜索引擎背后的故事
结果让我懵逼,我搜到的第一条内容竟然不是拿来剔牙的工具,而是搜出了一位明星,江湖美誉 “吴牙签”。
程序员鱼皮
2021/07/28
1.5K1
关于全部已知导致百度索引量下降的原因分析及解决方案
索引量是流量的基础,索引量数据的每一个变动都拨动着站长敏感的神经,“索引量下降之后该如何着手分析”一直是各位讨论的热门话题。这次站长社区版主老吕又拔刀相助了,看看史上最全的百度索引量下降原因分析及解决方案吧。
高级优化师
2019/10/17
1.5K0
关于全部已知导致百度索引量下降的原因分析及解决方案
大数据时代数据获取
本文作者:陈宏武,2013年华中科技大学毕业,之前从事搜搜网页搜索的下载调度,数据质量优化工作。目前在内部搜索平台部外站数据组从事网络爬虫、下载调度、页面抽取及数据整合相关工作。 “你百度一下会死啊”?答:“会”。 最近的WZX事件闹得沸沸扬扬,不由得引起我们思考,如果WZX能获取更多更全的相关数据,如synovial sarcoma(滑膜肉瘤) 的DC CIK免疫疗法临床现状、武警二院属于莆田系等,也许当前的医疗手段依然无法挽回他的生命,但是他的求医体验应该不会是现在这样。 大数据是什么?个人认为
腾讯技术工程官方号
2018/01/26
1.3K0
浅析:18个影响网站流量下降的原因!
网站流量一直以来是一个动态指标,每天都会有一定的涨幅,这是一个正常现象,但有的时候,网站流量会莫名其妙的开始持续下降,而从SEO人员的角度,总是感觉自身什么也没操作,就出现这种情况。
蝙蝠侠IT
2019/07/22
1.3K0
浅析:18个影响网站流量下降的原因!
《这就是搜索引擎》爬虫部分摘抄总结
首先从互联网页面中精心选择一部分网页,以这些网页的链接地址作为种子URL,将这些种子URL放入待抓取URL队列中,爬虫从待抓取URL队列依次读取,并将URL通过DNS解析,把链接地址转换为网站服务器对应的IP地址。然后将其和网页相对路径名称交给网页下载器,网页下载器负责页面内容的下载。对于下载到本地的网页,一方面将其存储到页面库中,等待建立索引等后续处理;另一方面将下载网页的URL放入已抓取URL队列中,这个队列记载了爬虫系统已经下载过的网页URL,以避免网页的重复抓取。对于刚下载的网页,从中抽取出所包含的所有链接信息,并在已抓取URL队列中检查,如果发现链接还没有被抓取过,则将这个URL放入待抓取URL队列末尾,在之后的抓取调度中会下载这个URL对应的网页。如此这般,形成循环,直到待抓取URL队列为空,这代表着爬虫系统已将能够抓取的网页尽数抓完,此时完成了一轮完整的抓取过程。
SeanCheney
2018/08/16
1.5K0
《这就是搜索引擎》爬虫部分摘抄总结
Python网页处理与爬虫实战:使用Requests库进行网页数据抓取
这两个步骤分别使用不同的函数库:requests 和 beautifulsoup4
Srlua
2024/06/01
1.2K0
Python网页处理与爬虫实战:使用Requests库进行网页数据抓取
基于python-scrapy框架的爬虫系统[通俗易懂]
通用爬虫工作流程: 爬取网页 – 存储数据 – 内容处理 – 提供检索/排名服务
全栈程序员站长
2022/06/27
1.1K0
基于python-scrapy框架的爬虫系统[通俗易懂]
数据界的达克摩斯之剑----深入浅出带你理解网络爬虫(First)
网络爬虫 为了解决上述问题,定向抓取相关网页资源的聚焦爬虫应运而生。聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。与通用爬虫(general purpose web crawler)不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。 三.爬虫背后的相关技术和原理 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存储,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。
一枕眠秋雨
2024/03/11
2591
数据界的达克摩斯之剑----深入浅出带你理解网络爬虫(First)
一文让小白也能了解爬虫
前段时间我妈突然问我:儿子,爬虫是什么?我当时既惊讶又尴尬,惊讶的是为什么我妈会对爬虫好奇?尴尬的是我该怎么给她解释呢?
龙哥
2019/07/10
7620
一文让小白也能了解爬虫
一文学会爬虫技巧
作为冷数据启动和丰富数据的重要工具,爬虫在业务发展中承担着重要的作用,我们业务在发展过程中积累了不少爬虫使用的经验,在此分享给大家,希望能对之后的业务发展提供一些技术选型方向上的思路,以更好地促进业务发展
kunge
2020/08/09
1.1K0
Python 网络爬虫概述
几乎每个网站都有一个名为robots.txt的文档,当然也有有些网站没有设定。对于没有设定robots.txt的网站可以通过网络爬虫获取没有口令加密的数据,也就是该网站所有页面的数据都可以爬取。如果网站有文件robots.txt文档,就要判断是否有禁止访客获取数据 如:https://www.taobao.com/robots.txt
Python知识大全
2020/02/13
1.4K0
Python 网络爬虫概述
外贸网站建设,做好技术SEO的7个技巧!
很多外贸网站建设时会忽略技术SEO操作,导致后面开始SEO时候,网站需要大幅改版。如果你想在谷歌上更快获得排名,那在网站开发阶段就应该打好一个SEO基础。本文一尘SEO将通俗易懂地向您阐述外贸网站在建设过程中,做好技术SEO的7个技巧,让您少走弯路。
一尘SEO
2020/07/29
1.7K0
外贸网站建设,做好技术SEO的7个技巧!
【 文智背后的奥秘 】系列篇 :情感分类
本文介绍了文智平台情感分类系统,该系统主要基于深度学习技术,针对互联网产品、新闻、影视等领域的评论进行情感倾向分析。系统通过自然语言处理技术对文本进行预处理、特征提取、分类器等模块,最终输出情感分类结果。系统还介绍了在垂直领域的应用,如电影评论、电商评论等,并给出了相应的系统架构设计、算法细节等。
文智
2016/09/29
4.2K3
【 文智背后的奥秘 】系列篇 :情感分类
为什么大型站点要建立网站地图?
有很多大型网站不重视网站地图的建设,不少大型网站的网站地图只是敷衍了事,做一个摆设。其实网站对于大型网站是很重要的,大型网站海量的数据、复杂的网站导航结构、极快的更新频率使得搜索引擎并不能完全抓取所有的网页。
茹莱神兽
2020/09/07
1.8K0
为什么大型站点要建立网站地图?
数据界的达克摩斯之剑----深入浅出带你理解网络爬虫(Third)
接上文数据界的达克摩斯之剑----深入浅出带你理解网络爬虫(Second)-CSDN博客
一枕眠秋雨
2024/03/11
1980
数据界的达克摩斯之剑----深入浅出带你理解网络爬虫(Third)
推荐阅读
相关推荐
舆情监控系统爬虫技术解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档