爬虫数据采集技术趋势-智能化解析

优采云 发布时间: 2020-08-13 04:25

  爬虫工作内容

  互联网作为人类历史最大的知识库房,是没有充分结构化的。目前互联网仅仅是一些文本等多媒体数据的聚合,内容似乎十分有价值,但是程序是难以使用这些没有结构化的数据。

  在2006年左右,有专家提出的web3.0,语义互联网,知识共享。虽然现今开放API,SOA概念越来越普及,真正语义上的互联网的时代虽然还十分遥远。因此爬虫仍然是最重要的手段,一端不断解析,聚合互联网上的数据,另外一端向各种各样的的应用输送数据。

  现有爬虫开发技术存在问题

  从急聘市场岗位需求可以看出,近年来对爬虫工程师需求越来越强烈。

  个人判定缘由有两个:

  信息聚合是互联网公司的基本需求。

  数据时代到来,对数据更强烈的需求。

  下面是我整理的部份靠爬虫聚合信息的创业公司,按照时间次序排序:

  最后5种类型,几乎2014年都是开始。很多金融场景相关应用开始出现,这就对准确度和可靠性提出了更高的要求。但现有的爬虫开发技术能够满足高可靠,*敏*感*词*,高效率开发需求呢?

  从软件工程角度来看,一件事情若果未能评估,那就难以管理。爬虫开发常常是被吐槽的诱因之一,就是工作量往往难以评估。一般的软件项目的开发过程随着时间推动,工作量会渐渐降低,也是你们常常说的烧尽疗效。

  而爬虫开发生命周期如下图:

  爬虫开发主要有两个方面内容:下载网页,解析网页。解析网页大约抢占开发工作的80%左右。

  下载网页功能的开发工作,会涉及IP限制,验证码等问题,这样问题都是可以预期的。同时,随着现今优秀的爬虫框架和云服务器的普及,问题解决上去会更轻松。

  编写解析代码,虽然有一些基本工具chrome,firecdebug可以使用,但仍然须要人工剖析,编写解析规则。无论是使用xpath,正则表达式,css selector,都不能减轻这一部分的工作量。

  大量重复性工作会导致以下两个问题:

  即使同类型的网页看起来99%是一样,也须要编撰独立的爬虫。这都会给人这样一种感觉——爬虫开发大部分的工作内容是重复的。

  数据源网页改版,几乎整个爬虫项目须要重做。重做的工作量几乎是100%,爬虫工程师心里常常是一万只矮马跑过。*敏*感*词*融场景须要。

  智能化解析

  这是一张新浪新闻的图片。

  可以发觉,视觉上很容易了解到,新闻所报导的风波的标题,发表时间和正文。自然也会想到,能否通过一些机器学习的算法达到手动解析的目的?这样就不用人工编撰解析额,减少重复劳动。在2008年开始,就要研究机构发表了相关论文。

  ~deepay/mywww/papers/www08-segments.pdf

  /en-us/um/people/znie/p048.special.nie.pdf

  也就是在2008有一家相关的创业公司,在斯坦福大学孵化。

  DiffBot智能化数据采集公司

  总部坐落加洲的Diffbot创立于2008年,创始人Mike Tung,是哈佛结业*敏*感*词*。Diffbot是通过人工智能技术,让“机器”识别网页内容,抓取关键内容,并输出软件可以直接辨识的结构化数据。其创始人兼首席执行官Mike Tung表示,“Diffbot如今做的,相当于人类在浏览网页文章时所做的事情,找出页面中最核心的相关信息。”目前Diffbot早已发布了头版API和文章API,还有产品API。服务的顾客包括三星、eBay、思科、美国在线等。

  Diffbot的理念就是通过“视觉机器人”来扫描和辨识不同的网页类型(主要是非结构化的数据),再将这种丰富的数据源用于其他应用。Mike Tung表示:“我们在获取页面然后会对其进行剖析,然后通过成熟先进的技术进行结构化处理。”之前我提及的we structure the world's knowledge,就是该公司提出的理念。

  Diffbot在基于智能采集的基础上,又开发出好多数据产品,比如知识图谱,智能商业BI。在2016腾讯与硅谷风投机构Felicis Ventures领投了人工智能创业公司Diffbot 1000万美元的A轮融资,很多互联网大鳄开始发觉这家公司的价值。

  算法实践

  通过智能方法来解析网页须要两个步骤:

  基于视觉上的网页分割,将网页分割几个视觉块。

  通过机器学习训练的方法来判定各个视觉块的类型,是标题,还是正文。其中主要流程和通常机器须要流程没哪些区别。这就不详尽解释。使用到使用的开源框架有:scikit-learn,phantomjs

  Scikit-Learn机器学习库早已十分成熟,很容易上手。

  phantomjs,是一个headless webkit渲染引擎。做爬虫开发的朋友应当十分须要。

  网页分割算法

  从Diffbot初期发布的文章来看,是通过图象处理的方法来切割视觉块。使用到的算法有,边界检测,文字辨识等算法。但这些方法估算量偏大,复杂度很高。

  另外一种实现方法是基于Dom树结构,导出所需的视觉特点。

  聚合时侯需用的特点变量。主要考虑视觉相关的诱因有元素在页面上的位置,宽度和高度,Dom的层次。

  有一点须要注意的是,现在网页好多是动态生成。需要依靠phantomjs工具来进行动态网页渲染。

  聚类算法可以选用的DBSCAN,DBSCAN算法优点是愈发密度来界定,比起K-mean算法的优点,是处理任意形状的聚合。

  具体的实现方法可以参考下边博文:

  分类算法

  在第一步处理后,网页上的标签,会被界定分若干类,需要判定标签的类型,是否是标题,正文,广告,导航之类。需要整理出类似下边的,训练矩阵。

  整个学习过程与通常的机器学习训练过程没有区别。由于数据样本规模不大,分类算法基本算法采取。分类算法可以选用朴素贝叶斯,或者SVM。

  总结和展望

  本文介绍的方法比较简略,一般来说解析模型只能针对特定的网路训练解析模型,比如新闻,电商产品页。所以不同类型的网页,所须要的特点变量有较大差异。针对不同特征类型数据,需要你们自己花时间去探求和实践。

  随着数据时代和智能化时代到来,爬虫作为重要的数据来源,自身须要一些技术提高来适应时代的要求,这也就对爬虫工程师提出更高的要求。成文简陋,权且当作抛砖引玉,欢迎你们留言讨论。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线