李方方 陈容华 秦胜男 戴胜
摘 要:文章主要以航空公司为背景,通过爬虫获取和航班量相关的事件信息,并且对这些事件进行智能抓取和建模画像,主要采用了URL去重算法和4种分布式调度算法进行事件抓取,通过近义词匹配进行事件去重,最后对抓取的事件进行画像建模和可视化展现。
关键词:大数据;机器学习;智能抓取;画像
1 大数据对各行业产生不同程度的影响
随着互联网大数据的发展,网站数据、社交媒體数据等成为互联网大数据的重要组成部分。对于民航业领域,社会事件会在很大程度上影响旅客的出行需求变化,从而影响航空公司飞机运力投放、航班编排、票价策略调整等,对互联网事件的准确抓取和分析能够帮助航空公司更好地服务市场、服务旅客、提升收益。本文主要从互联网上抓取对航空公司有影响的事件,并进行分词及语义等处理,提取事件的属性建立事件模型以及可视化展现。
2 互联网事件的抓取
通过初步分析,对民航业可能有影响的事件主要分为如下几类:政治会议(例如G20)、展会、体育赛事、演唱会、突发异常天气等,因此,主要对这些事件进行抓取。下面是比较典型的影响事件以及数据源,每个类型的事件数据至少来自2个数据源(网站),影响航班的重要事件主要是展会、体育赛事、突发异常天气、政治会议、航班信息等,主要的数据源是E展会、中国会展门户、大麦网、永乐票务、中国天气、非常准等[1]。
3 爬虫策略
本文采用的爬虫使用jsoup高效下载页面,并根据用户配置开启足够多的线程,或是自动识别博客、新闻的标题、正文信息。为了防止反爬虫,用户需根据需要自行添加header和cookie信息,如未添加则使用默认的伪造Window下浏览器信息。因为涉及的统一资源定位符(Uniform Resource Locator,URL)众多,本文采用URL去重算法,下文介绍了该算法。
3.1 URL去重算法介绍
在网络爬虫的运行过程中,当抓取模块完成对网页的下载后,解析模块会到下载的网页进行解析,抽取嵌套在HTML中指向其他网页的URL,并将这些URL填充进待抓取队列以供下一轮抓取。互联网中网页相互之间的URL链接指向错综复杂,解析模块所抽取到的URL很可能已经被抓取过了,如果直接将这些URL加入待抓取队列,抓取模块就会对某些网页进行重复抓取,严重影响爬虫系统的运行效率。为了避免这一情况,需要在填充待抓取队列之前对URL进行去重处理,判断该URL是否已经被抓取过,已经被抓取过的,则将其丢弃,不予抓取;否则,将其填充进待抓取队列[2]。
3.2 本文所用的URL去重算法
本文采用URL去重算法,即任何节点爬取到的需要爬取的网站URL经过筛选后将统一返回主节点,并直接存储至set中,再进行节点分配,有效避免了重复URL的出现。
关键代码如下:
private
if(!nc.getBan().contains(link[i])&&nc.getURL().add(link[i].trim())&&nc.getURL().size()<=nc.getAllLimit())
nc.getNewURL().add(link[i].trim());
利用LinkedHashSet实现URL去重,如果获取的URL可以被添加到LinkedHashSet中,则添加到新获得URL队列中。
3.3 分布式调度算法
爬虫任务根据用户设置的单次节点爬取量,将获取到的需要爬取的URL分批发送给对应节点,既保证所有节点近似均匀分配,又兼顾了爬虫的高效和软件的轻量化。
本爬虫为用户提供了直接运行、阻塞运作、定时运行和间隔运行4种调度方式,可以满足不同的场景需求,比如直接运行方式可以保证多个爬虫任务同时执行互不干扰;阻塞运行一般是等爬取任务结束后再进行其他网站的爬取;定时运行是任务必须在特定日期执行,可以使用fixTimeRun;间隔运行是设置几个小时爬取一次。
网站的自动提取进程、爬虫节点的接收请求服务器、爬取后的数据处理接口、节点接收程序、请求分析及判断网站类型启动相应爬取程序、普通单独页面的数据爬取进程、节点服务器启动程序。单独页面爬取后将反射调用数据处理接口进行处理及数据持久化操作,如未添加自定义处理类,则使用程序内置的数据持久化模块。
3.4 网页自动结构化
对于新闻博客类网页,能进行网页正文的自动抽取、对正文进行自动摘要和关键词分析。本文采用的是Boilerpipe正文提取算法,其基本思想是通过训练获得一个分类器来提取出需要的信息,在算法中定义多个过滤器,即对TextBlock进行过滤,使用机器学习、统计、启发式方法等数据挖掘算法判断哪些是TextBlock所需要的(正文段),给TextBlock加上lable,去除无关的TextBlock。
4 实现事件的去重功能
事件的去重功能主要有两个方面:(1)不同数据源(网站)的事件去重。(2)不同天抓取的事件去重。本文最初采用相似度阈值去重法,但大部分展会、演唱会等名称相似而实则不同的信息存在被误删的现象,如:第X届、XX站等。最终采取近义词匹配去重法,结合时间及地理位置信息,有效避免了大量信息被误删的情况[3]。
4.1 相似度阈值去重法
相似度阈值去重法的实现思想是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数,许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。算法流程如下:
(1)計算strA的长度n,strB的长度m。
(2)如果n=0, 则最小编辑距离是m,m=0,则最小编辑距离是n。
(3)构造一个(m+1)×(n+1)的矩阵Arr,并初始化矩阵的第一行和第一列分别为0—n,0—m。
(4)两重循环,遍历strA,在此基础上遍历strB,如果strA[i]=strB[j],那么cost=0,否则cost=1,判断Arr[j-1][i]+1,Arr[j][i-1]+1, Arr[j-1][i-1]+cost的最小值,将最小值赋值给Arr[j][i]。
(5)循环结束后,矩阵的最后一个元素就是最小编辑距离。
该算法是目前计算字符串之间距离比较常用的算法,但大部分展会、演唱会等名称相似而实则不同的信息会存在被误删的现象,比如以大麦网的展会信息(见图1)为例,进行相似度运算。
StringHelper.similarity(" '岳来越快乐'2017岳云鹏相声专场—太原站", " '岳来越快乐'2017岳云鹏相声专场—成都站" );
相似度为0.9090909090909091;通过相似度运算后,均不符合阈值,会被误删除。
4.2 近义词匹配去重法
本文先用相似度运算将获取到的结构化数据进行初步处理,替换关键词后再到数据库中进行查找匹配。例如:取得数据将“()”替换为中文“()”,将“,”替换为“,”,将空格去除等。展会名称:替换博览会为展览会,就不会有误删的问题存在了。
5 事件的画像建模
事件的画像建模是事件属性自动化提取,在本文中属性主要包括主办方级别、影响区域范围、影响力度、影响人群等,本文主要采取属性自动化提取算法,即将不同种类事件采用不同规则筛选出部分属性的匹配项。例如,主办方包含“中华人民共和国”或“中国”则为国家政府组织,包含“世界”或“全球”则为国际政府组织。
6 事件建模的可视化展现
本文的主视图采用百度地图,清晰、准确地展示热点的地理位置信息,并提供可交互的动态展示详细信息。分时地区统计视图是根据用户选择的时间动态生成该时间段内各省份的各种数据总量,并展示在小型中国地图中。全局日期统计视图是把数据库中所有当年的数据,按日期分类统计,并生成一个3D视图,其中x轴为日期,y轴为月份,z轴为数量。局部日期统计视图是把该场馆在该时间段内所有类型数据的开始时间展示到二维日历视图中。
[参考文献]
[1]梁正友,张林才.基于Rabin指纹方法的URL去重算法[J].计算机应用,2008(S2):185-186,203.
[2]李婷.分布式爬虫任务调度与AJAX页面抓取研究[D].成都:电子科技大学,2015.
[3]MESBAH A V,DEURSEN S,LENSELINK.Crawling AJAX-based Web applications through dynamic analysis of user interface static changes[J].ACM Transactions on the Web,2012(1):30.
Abstract:This article mainly takes the airline as the background, through the reptile to obtain and flight volume-related event information, and the capture of these events intelligent and modeling. The URL de-heavy algorithm and four distributed scheduling algorithms are used to carry out event crawling, and the event to be re-emphasised by close word matching, and finally the image modeling and visual representation of the crawled events is carried out.
Key words:big data; machine learning; intelligent crawl; portrait