APP下载

网页监控分布式爬虫

2015-09-18方宇浩倪胜巧四川大学计算机学院成都610065

现代计算机 2015年11期
关键词:爬虫队列网页

方宇浩,倪胜巧(四川大学计算机学院,成都610065)

网页监控分布式爬虫

方宇浩,倪胜巧
(四川大学计算机学院,成都610065)

互联网的飞速发展,改变人们获取信息的方式,互联网渐渐取代传统媒体,现在每天都有海量的信息在互联网上更新着,如今世界已经进入到以数据为中心的大数据时代。提出一种监控这些数据的分布式爬虫技术,以及一种基于网页结构的提取网页更新内容的算法。

爬虫;分布式系统;消息队列

0 引言

随着互联网的发展,从互联网获取消息渐渐取代了传统媒体,如电视、报纸等。但是互联网的爆炸式增长导致消息也是爆炸式地增长,各种网站每天更新着海量的信息。要采集这些海量的信息,依赖计算机单机处理能力的集中式网络爬虫无法满足快速获取大量资源的需求[1],分布式网络爬虫有良好的扩展性,可分布于不同地点,能满足人们对信息采集的实际需求[2]。

1 系统架构

系统结构见图1,该分布式监控系统使用一个消息队列将各部分联系起来,很好的解耦合。初始化模块将任务写入job_queue中,各个爬虫客户端从job_queue中获取任务,并采集信息,将采集好的信息写入task_queue,最后由控制模块将task_queue的数据处理后写入到数据库。并在各个模块配置supervisor监控各个模块的进程,如果出现异常进程结束则重启这个进程。

1.1消息队列

消息队列是一种进程间通信或同一进程的不同线程间的通信方式,软件的队列用来处理一系列的输入,通常是来自使用者。消息队列提供了异步的通信协议,每一个队列中的记录包含详细说明的资料,包含发生的时间、输入装置的种类,以及特定的输入参数,消息的发送者和接收者不需要同时与消息队列互交[3]。消息会保存在队列中,直到接收者取回它。

分布式监控系统使用消息队列进行任务的分发和收集,job_queue为爬虫客户端的任务队列,task_queue为爬虫端完成任务后写入数据的队列,控制端从这里获取数据并分析数据最后写入数据库[4]。

图1 

1.2爬虫客户端

从消息队列的job_queue获取任务,见图2,任务为json格式{“baseUrl”:http://xxx.com”,“id”:123}。爬虫端获取任务后执行当前任务,从Web获取baseUrl页面的HTML源代码,然后解析HTML源代码提取出页面中的所有a标签对应的text和url属性。并按json格式{“baseUrl”:http://xxx.com”,”id”:123,”context”:[ {“url”:”xxx”,”text”:”yyy”}…]}写入到task_queue。写入task_queu之后向job_queue发送ack表明这个任务已完成,如果没有收到ack,job_queue会在一段时间后将这个任务重新发送给爬虫客户端。在成功完成当前任务后爬虫客户端继续从job_queue获取任务。

图2 

1.3控制模块

控制模块的初始化模块定时从数据库读取所有需要监控的网页的id和url然后写入到job_queue中,保证每隔一定时间爬虫客户端就会去爬取相关信息。控制模块的处理模块会一直读取task_queue中的数据,如果有新数据就读出,然后把url做短链接处理,将url作为key在key-value的数据库中查找去重。如果这个url是新的,那么这个数据也是刚更新的,将其写入到数据库中。

1.4监控模块

在生产环境中会遇到各种奇怪的数据或者传输错误导致各个模块因此而产生异常,该模块可能没有考虑到所有的异常,导致该模块挂掉。该系统结构的特殊性,可以直接重启任何模块而不影响最后的结果,所以可以直接用一个监控模块监控各个已经启动的进程,如果该进程异常退出就直接重启这个进程。

2 关键技术

2.1提取网页更新内容算法

网页更新内容,该系统主要关注各大门户网站以及各单位网站,监控其首页,当有更新的时候需要提取出更新内容以及相关链接。整个网页可以看作一个HTML DOM树,树的节点是每一个HTML标签,如〈head>、〈body>、〈a>等,基本所有的网站的更新内容都出现在〈a>标签中,内容为〈a>标签的text属性,链接为〈a>标签的href属性。

第一步就是对网页HTML的解析,生成HTML DOM树,对于一些常见的HTML标签不闭合的错误要进行相应的处理。然后用广度优先搜索方法遍历HTML DOM树,找出所有的〈a>标签将其放入到一个列表中,然后遍历该列表提取出所有〈a>标签的text和href属性。使用短链接算法将href属性里面的url进行处理[5],该系统使用的短链接算法为62进制算法,每位由[a-z,A-z,0-9]62个字母组成,长度为6位,总共可以表示626=56800235584种组合。使用短链接算法的目的主要是为了加速key-value数据库的查找,因为一般url都比较长,而使用短链接算法处理过后只有6位,数据库在查找时不管基于什么实现都要基于key字符串的长度,该短链接处理减少了key字符串的长度,因此大大减少key的查找时间。

第二步是将上一步处理后的短链接作为key在key-value数据库中去查找,判断该短链接是否已经出现过,如果没有则说明这个url是第一次出现在这个页面上,也就是这条信息是新更新的[6],那么将这个key写入数据库,并标记这个〈a>标签是新内容,然后将该标签对应的text作为更新内容写入到指定的数据库[7]。

2.2系统容错

该系统要做到的就是在无人监管的情况下可以正常长时间运行。该系统使用消息队列将各个模块解耦,各个模块相互独立。对于消息队列来说要做到的就是数据持久化和数据重传。持久化就是用于消息队列服务宕机的时候保证重启消息队列数据还在,而数据重传则用于某个爬虫客户端宕机时能够将来其任务重新分配给其他爬虫客户端。持久化即将消息队列按一定的格式写入到硬盘或者数据库,保证出错后数据依然存在,可以从硬盘或者数据库恢复。消息重传要求各个从消息队列获取消息的客户端在处理完之后必须向消息队列返回一个消息,如果在一定时间内没返回说明该客户端宕机,该条消息应该被重新发送给其他客户端重新处理。

对于各个模块来说必须配有监控模块,各个模块都由监控模块启动,并记录它们进程的PID,监控模块定期检查这些进程的PID是否存在,如果不存在说明进程异常退出,重启该模块,重启并不会对结果有任何影响。

3 结语

本文给出了一种网页监控分布式爬系统架构,以及一种基于网页结构的网页更新内容的提取算法。该架构具有很好的鲁棒性,高效地运行于大部分系统,并且系统具有良好的扩展性,满足对于信息采集的不同需求。

[1]Novak B.A Survey of Focused Web Crawling Algorithms[J],2004

[2]Brewington BE,Cybenko G.2000b.Keeping up with the Changing Web[J].Computer,2000:52~58

[3]Campos R,Rojas O,Marin M,et al.Distributed Ontology-Driven Focused Crawling[C].Parallel,Distributed and Network-Based Processing(PDP),2013 21st Euromicro International Conference on.IEEE,2013:108~115

[4]De Bra P,Houben G J,Kornatzky Y,et al.Information Retrieval in Distributed Hypertexts[C].RIAO,1994:481~493

[5]Pal A,Tomar D S,Shrivastava S C.Effective Focused Crawling Based on Content and Link Structure Analysis[J].arXiv Preprint arXiv: 0906.5034,2009

[6]Amitay E.Using Common Hypertext Links to Identify the Best Phrasal Description of Target Web Documents[C].Proceedings of the SIGIR,1998,98

[7]Diligenti M,Coetzee F,Lawrence S,et al.Focused Crawling Using Context Graphs[C].VLDB.2000:527~534

Distributed Web Monitoring Crawler

FANG Yu-hao,NI Sheng-qiao

(College of Computer Science,Sichuan University,Chengdu 610065)

Internet is under rapid development and changing the way of obtaining information in life vividly,it is also on the way to replace traditional media.Countless information are updated on the Internet every day,which means the whole world has in fact stepped into another era,the era of big data.Proposes a distributed system crawler to monitor the data and an algorithm to extract Web updated content based on Web structure.

Crawler;Distributed System;Message Queue

1007-1423(2015)11-0062-03

10.3969/j.issn.1007-1423.2015.11.012

方宇浩(1990-),男,四川都江堰人,硕士研究生,研究方向为机器智能

倪胜巧(1982-),男,浙江金华人,在读博士,讲师,研究方向为机器智能

2015-02-12

2015-03-18

猜你喜欢

爬虫队列网页
利用网络爬虫技术验证房地产灰犀牛之说
基于Python的网络爬虫和反爬虫技术研究
基于HTML5与CSS3的网页设计技术研究
队列里的小秘密
基于多队列切换的SDN拥塞控制*
在队列里
基于CSS的网页导航栏的设计
基于HTML5静态网页设计
大数据背景下校园舆情的爬虫应用研究
丰田加速驶入自动驾驶队列