【文智背后的奥秘】系列篇——结构化抽取平台

版权声明:本文由文智原创文章,转载请注明出处: 
文章原文连接:https://www.qcloud.com/community/article/91html

来源:腾云阁 https://www.qcloud.com/community正则表达式

 

随着大数据时代的到来,一个大规模生成、分享、处理以及应用数据的时代正在开启。若是能将互联网上异源异构的非结构化或半结构化数据转换为更易处理的结构化数据,能够极大的下降获取数据的门槛,为信息检索和数据挖掘提供基础,更好的挖掘数据中蕴藏的价值。api

单纯考虑网页这种半结构化数据的抽取:对于搜索引擎通常须要抽取出页面的标题、实际标题、时间、正文等关键信息;而对于去哪儿、携程这种酒店预约网站则须要进行更精细化的信息抽取,须要抽取出酒店名称、地址、电话、价格、评分、简介等具体属性。浏览器

能够看到,大量互联网产品都依赖抽取功能,所以迫切须要一个方便、便捷、高效且准确的网页抽取平台。架构

一.经常使用抽取方法

目前针对html这种半结构化的页面,业界比较流行的抽取方法大体就两类:dom树分块以及模版抽取。框架

1.dom树分块

该方法的基本思想就是对html页面建dom树后,对dom树进行遍历,同时根据事先训练好的分类模型判断遍历到的容器节点的语义块类别,本质上就是分类问题。好比对新闻网页,通常定义的语义块类别有标题、实际标题、时间、正文、相关推荐、相关阅读、版权、广告等。若是用分类模型进行语义块判断,须要用事先标注好的样本进行训练。采用的特征集合包括该节点下的文本长度、特定关键词命中状况、标点符号个数、图片个数、标签宽度、各类html标签的分布状况等等。dom

经过模型预测节点的语义块类别会有几个候选,总体上会获得若干语义块组合序列,最后能够再用语言模型的思路获得一个最优序列。异步

该方法的优势是通用性强,主要工做包括定义新类别页面的语义块类别、样本标注、训练模型、抽取程序,通常用于大规模网页的处理;缺点是通常抽取到的语义块比较粗,精度不高。另外样本标注也须要大量的人力成本和时间成本。工具

2.模版类

针对下面这个页面

图2.1 豆瓣电影详情页学习

咱们但愿抽取导演、编剧、主演、类型、语言、上映日期等字段的信息, dom树分块的方法就不太适用了。由于这块区域总体上属于一个容器节点,子节点的特征方面区分度也不大。
所以有了第二类抽取方法:模版类抽取。该方法的基本思想很简单:事先配置好须要抽取内容的模版,模版能够是正则表达式或XPATH, 而后基于html进行精确的模版匹配,将匹配结果输出。该方法的优势是能够实现精细化抽取,缺点是模版的配置和维护成本较高。如正则抽取比较依赖页面中的wording,把wording做为桩,提取出桩周围的有用信息,所以对配置人员的正则能力要求比较高。

精细化抽取如今业界采用比较多的是XPATH,XPATH做为XML文档路径标准语言,经过路径表达式来定位与查找XML文档中的节点。使用XPATH进行精细化抽取的优势有:
(1)不少主流的浏览器都提供获取指定节点XPATH路径的功能,或者能够经过嵌入的JavaScript代码从DOM中获取XPATH路径,所以易于实现可视化配置,下降配置门槛。
(2)XPATH依赖页面DOM结构。而实际上一个网站或者一个子域下的页面结构确实大致同样,或者基本能够穷举,所以配置一组XPATH每每能够覆盖一个子域甚至一个站点下的页面。
(3)做为XML标准集下的一个重要标准,XPATH被广大厂商接受并推广,已经有不少开源且成熟的实现,所以更易获得社区的普遍支持。

本篇重点介绍咱们在XPATH模版抽取方面作的工做,包括如何使配置简单化、如何对抽取的结果进行去噪、如何维护模版的更新、如何快速接入抽取等等;

在开始介绍抽取平台以前,先看看刚才那个豆瓣页面咱们的抽取效果:


图2.2 豆瓣电影详情页抽取结果

二.平台的总体框架及介绍

系统分为配置管理、XPATH抽取以及去噪处理三个主要模块:
(1) 配置管理:负责配置的管理、更新与分发。
(2) XPATH抽取:根据配置的XPATH抽取页面中指定的属性。
(3)去噪处理:对抽取的结果作去噪处理。


图3.1 抽取平台总体框图

1.XPATH配置

为了下降配置门槛,作到人人可配、人人会配,所以在设计和实现模板配置的UI和交互的过程尽可能作到简洁明了、轻量级、引导式交互、及时响应等原则。


图3.2 XPATH配置页面

2.抽取过程

整个抽取过程比较简单,所以直接使用流程图来讲明抽取过程。


图3.3 XPATH抽取流程

3.去噪处理

虽然XPATH的抽取能精确到元素粒度,但不少时候仍然有大量的噪音存在。为此,咱们提供了四个方面的噪音过滤规则:
(1)文本规则:经过配置正则表达式将属性值中的噪音去除。
(2)URL规则:针对连接元素,经过配置URL规则,将href属性不知足URL规则的节点过滤掉。
(3)元素属性规则:经过配置标签的属性规则进行噪音过滤。
(4)html规则:经过配置起始串与结束串,将html中以起始串开始,以结束串终止的子串过滤掉。


图3.4 噪音过滤规则配置页面

4.List元素抽取

在实现的过程当中,发现有一类属性的属性值是一个List,List内元素之间是并列的。好比专辑《吻别》页面中,名称、歌手、发行时间等字段属于普通属性,但专辑下的曲目则属于List类型的属性。


图3.5 百度音乐专辑页

List元素XPATH有如下特色:拥有一个相同的祖先节点,从该祖先节点开始节点名称、层次以及深度都彻底相同,而且在某个或某几个层级上是平行关系(偏移不同)。上述专辑页中任意两首歌曲的XPATH即知足该特色:
《恋爱的人都同样》:/html/body/div[4]/div/div/div[4]/div/div[1]/div[2]/div[2]/div/ul/li[8]/div/span[5]/a
《拥抱阳光》:/html/body/div[4]/div/div/div[4]/div/div[1]/div[2]/div[2]/div/ul/li[9]/div/span[5]/a

根据这一特征,为了更好的表达和抽取这类属性值,咱们将上面歌曲属性的XPATH虚化为:
/html/body/div[4]/div/div/div[4]/div/div[1]/div[2]/div[2]/div/ul/li[%d]/div/span[5]/a
其中%d做为占位符,抽取匹配的时候会具体化为实际的数字。

List属性的抽取流程为:

图3.6 List属性抽取流程

5.抽取指标及运营工具

平台通过近一年的持续迭代和运营,各项指标趋于稳定;平台的稳定性和可靠性获得验证;运营工具趋于完备,监控告警也基本作到全方位无死角。下面从三个方面来讲明:
(1)运营指标:各项指标都在稳步上升,数据质量也在持续提升。数据在Qzone资讯推荐、QQ音乐搜索以及部门内数据挖掘类需求中获得应用,数据质量经受住了业务的考验。
最近两周系统主要运营指标以下,能够看到各项指标稳中有升,系统的运营情况良好。

日期 站点数 URL模板数 XPATH模板数 网页数 抽取成功数 成功率
2014-10-23 179 1159 2914 57,345,499 52,545,262 91.63%
2014-10-27 183 1168 293158,736,758 53,096,224 90.40%
2014-11-03 203 1295 3069 68,272,962 62,444,849 91.46%

表3.1 平台运营指标

(2)运营工具:提供了下载诊断与查询、快照查询、抽取检查、标准集验证、模板评测、抽样验证、抽取诊断等一系列的运营诊断工具。从配置、下载、快照、抽取到最终数据等环节都力争作到可运营。
(3)监控告警:结合一年以来暴露的运营问题,不断丰富对抽取各项指标的监控,提升系统的可用性和可靠性。目前主要告警有总体抽取失败报警以及模板抽取成功率跌幅超过阈值报警。

三.暗网数据抽取

经过上面的XPATH抽取平台,咱们已经具有将互联网上大部分网页转换为结构化数据的能力。可是对于互联网上存在的“暗网”数据,因为其自身的特殊性,须要专门设计和优化咱们的下载和抽取系统,下面主要介绍咱们在这方面的思考和解决方案。

1.暗网的造成

WEB2.0时代,随着用户对WEB应用的体验要求愈来愈高,大量相关技术应运而生,特别是AJAX技术的兴起,使得WEB应用的用户体验接近客户端类的体验,所以被业界普遍采用。这类应用的架构大致是这样的:


图4.1 AJAX请求流程

这类富WEB应用对于用户来讲比较友好,却对信息检索提出了考验。现今的搜索引擎爬虫大部分仍是基于页面之间的连接关系,但对于这种没法经过超连接扩散以及抓取的动态网页,则没法被搜索引擎收录, 所以造成所谓的“暗网”。

另外,随着移动互联网的兴起,信息出现了多元化、异构化及碎片化的趋势。大量数据从WEB端向移动端转移,甚至有不少数据就是为移动端而生的。这类数据的典型特色是,经过常规的页面连接没法获取,造成一个一个的信息孤岛。为了解决数据获取问题,业界主要从下面两个方面入手:
(1)开发更强大的爬虫系统,以应对信息的孤岛化。从相关新闻能够看到:百度针对搜索引擎的升级和更新中,很大一部分与解决“暗网”问题有关。
(2)与“暗网”网站合做,数据厂商经过平台方开发的API提交结构化的数据,来达到信息的互联互通。像google前不久推出的应用内搜索,就是经过这种方式试图打破信息壁垒。

2.难点及解决方案

经过大量的案例分析,发现存在两个方面的问题:
(1)下载扩散
对于常见的网页,咱们能够经过页面之间天然的连接关系被爬虫抓取,可是这类暗网页面每每没法经过正常的连接关系获取,接口之间是独立的。所以要扩散到这类动态接口,必须经过特殊的规则生成它们。这里咱们概括并抽象了一类特殊的模板类型:连接工厂模板,该模板是专门用来生产URL的。根据URL中可变的参数,在类型下咱们会预约义n个属性参数。而后经过定义一个URL拼接规则,将连接工厂类页面中抽取出来的属性填充到URL拼接规则中,生成最终的数据接口URL。整个URL生成流程以下:


图4.2 URL生成与扩散流程

(2)抽取
咱们的抽取平台是基于XPATH的, 所以对于接口数据格式为XML的异步HTTP请求,咱们只要经过上面的方法生成并下载便能进行抽取。但在富WEB应用中JSON已经成为普遍采用的数据格式,为了接入上面的抽取框架, 这里咱们采用的是将JSON数据转换成XML格式的方法,而后使用XPATH进行抽取。

图4.3 JSON数据抽取

能够看到,上述对暗网页面的下载与抽取比较好的适配在原有框架里,仅仅增长了一种连接工厂模板用于连接扩散,以及在抽取环节增长了一个数据类型转换的适配器模块。

三、暗网抽取案例分析

在Qzone资讯推荐项目开发及运营的的过程当中,发现今日头条新闻列表页都是采用AJAX的方式加载的,经过抓包以及分析源码发现,今日头条推荐频道的数据接口地址为:
http://www.toutiao.com/api/article/recent/?category=__all__&count=100&max_behot_time=(time_stamp).00&offset=0&utm_source=toutiao


图4.4 今日头条推荐频道异步HTTP请求


图4.5 今日头条发起异步HTTP请求的JS代码

该接口是JSON格式的接口,而新闻详情页的URL为JSON中的一个字段,如图所示:


图4.6 今日头条JSON数据字段详情

咱们将JSON转换为XML文档,转换后的结果为:


图4.7 转换为XML的今日头条接口数据

标红的部分即为新闻详情页的URL,能够经过正常的XPATH抽取出来,而后将该URL推给下载系统下载。经过这种特殊的扩散方法,今日头条的新闻才得以被下载系统下载,进而经过XPATH进行抽取。

四.将来展望

将来但愿在如下几个方面进行改进和优化,使得结构化抽取平台愈来愈完善。

  1. 平台配置的简易性:后续会在XPATH配置管理上持续优化,提升平台的易用性,进一步下降配置门槛和学习成本。
  2. 抽取任务接入更加方便快捷,下降接入所需的沟通成本和开发成本,实现自动化和通用化。
  3. 支持更多的数据输出格式:目前是输出基于protobuf协议的sstable、recordio格式的文件,将来会支持更多的数据格式。

同时欢迎有需求的团队联系咱们,使用腾讯文智天然语言处理

相关文章
相关标签/搜索