不知不觉,2011已经过去了,这一年中的大多时间,都花在了舆情监控系统的探索和研发上。尤其是作为舆情监控系统的基础子系统——网络爬虫系统,更是消耗了不少的时间和精力。下面简单分享一下在网络爬虫系统设计开发中的一些经验和不足。
首次接触爬虫,是在前年的时候,一次偶然的机会,从图书馆带回一本书中,夹带了一个网络爬虫的demo源码,当时只觉得非常敬仰那些能够写出爬虫程序的人,认为倘若有一天自己也能写一个网络爬虫出来,该是一件多么让人兴奋的事。后来工作之后,参与的第一个项目,就是网络舆情监控系统的开发,不过当时因为只是应届毕业生,且公司的这套产品已趋向成熟,正在推广期间,所以工作内容主要是该系统下网络爬虫子系统的配置和维护,以及爬虫日志的分析。也正是从这里开始,真正踏上了网络爬虫的探索之路。
期间,我的毕业设计作品就是一个小型的搜索引擎系统,做这个东西的目的也很明确,就是为了探索网络爬虫系统在实际应用中的一些核心技术,并积累一些经验。后来来了上海,没想到公司又是搞搜索、搞网络舆情的,所以又继续沿着之前的路走:设计开发爬虫,数据分析,和海量数据的全文检索。
这样的日子,不知不觉已经有一年了,在这一年里,采用不同的技术、不同的设计理念和不同的目的,主要做了三个版本的爬虫系统,最满意的要数现在这个了。个人认为最主要的原因还是因为有了之前的经验积累和沉淀,使得在爬虫设计之初就注意到了并避开了之前爬虫遇到的各种各样的问题。现在的爬虫系统,主要是作为一个定向数据采集和网页文本挖掘软件为网络舆情监控系统服务的,除了常规爬虫的网页采集、链接跟踪等功能外,还带有网页主题识别和价值文本抽取等稍微有点“特色”的功能。在笔者看来,这样的网络爬虫稍显“另类”,因为它与常规的网络爬虫相比,人工依赖更多,但是数据抽取更精准,更高效。不同于公司版本的网络爬虫是以命令行方式控制,笔者个人探索研究之用的UI版,整合了一个简单的界面,以使用户可以更方便、更直观的控制和配置爬虫。界面在设计之初,参考了国内某著名信息采集系统的UI,所以看起来爬虫更像是一个网页数据采集系统。但事实上,舆情监控使用的爬虫跟普通的网页信息采集系统,并没有很大的区别。以下是该系统的部分截图:
该系统目前采用的技术架构是:Quartz + HtmlUnit + HttpClient + DBCP,采用XPath来精确抽取网页文本,最低内存消耗5M,最长运行时间15天,最快抓取速度10208网页/小时,最高宽带占用38M/s
测试环境为:Windows Server2003 SP3 32位Hotspot 1536M内存 100M光纤 MySql5.1
其实对于网络爬虫工作模式,以及网络爬虫的模块设计,应该说很多人即便是没有做过爬虫的人,也能说出来个大概。事实上,虽然网络爬虫系统是技术密集型的软件系统,但是如果一个基础扎实的程序员要做一个像模像样的“简化版”爬虫,也不是什么十分困难的事情。
为什么这么说呢?笔者认为,爬虫的核心,无非就是网页获取、链接抽取、文本抽取,稍微高级一点即是权重分析、网页去重、更新策略,再高级就是人工智能和分布式集群了。抛开人工智能和分布式,要做一个单机版的爬虫,还是很容易的:java世界中,网页获取技术可谓多如繁星,如HttpClient等,链接抽取自然也不在话下,对于单机版的爬虫,权重分析、网页去重和更新策略可以暂时不去做,那么就剩下一个文本抽取了,过滤HTML标签就是最简单的文本抽取(当然实际上很少有这么简单处理的),而这对HtmlParser来讲,简直是小菜一碟。
在笔者看来,一套完善的网络爬虫系统,应该具备以下特点:
1、良好的框架结构
2、合适的网页获取技术
3、高度优化的代码
4、易于配置和管理
第一点:因为爬虫系统一旦运行起来,可能好几周甚至更长时间都不会停下来,良好的框架结构可以保证爬虫在这个漫长的作战过程中尽量少的犯错误,和较低资源占用;同时,良好的框架结构也为扩展和增强爬虫的功能奠定良好的基础;
第二点:在一年多的网络爬虫开发过程中,笔者接触了众多的网页获取技术,如Watij、JRex、JSoup再到后来的HtppClient和目前的HtmlUnit,总的来讲,各有优劣,所谓“优劣”,主要的判断标准有同一网页的获取时间、解析时间、是否支持脚本以及对内存和CPU的占用,爬虫要面对不同的页面类型,何时采用何种页面获取技术,以使爬虫消耗的资源和时间最少,是爬虫设计者不得不考虑的问题;据笔者了解,HttpClient应该是Java开源爬虫中用的最多的技术,也确实应该是爬虫的首选网页获取技术;
第三点:正如第一点所说,在爬虫长时间运行过程中,如果不对代码做高度优化,那么万一出现内存泄露,对爬虫而言,将会是致命的打击;另外,经过高度优化的代码,可以使CPU占用处于低位,如此,便可保证同样的服务器硬件上,爬虫的效率、速度和稳定性都会有质的提高;
第四点:爬虫系统不是智能的,很多情况不能够自己判断并作出决定,但是为了让爬虫变得聪明,往往需要配置大量的参数来“指导”和管理爬虫工作
正是基于上述四点保证,现有爬虫才能在最低5M内存时稳定运行,才能在两周的连续运行时间内不出现任何内存泄露等问题。不过这不能掩饰爬虫的“内伤”,而这些“内伤”也正是2012所要解决的问题:
1、虽然爬虫能够精确抽取论坛主题和回帖,以及点击量和回复数,但爬虫严重依赖XPath,不能够自主识别链接重要程度,不能够自主识别网页价值数据;
2、爬虫采用插件模式,每个站点都有一个插件,以此来保证抽取数据的准确性,但是缺乏大规模全网爬取的能力;
3、不支持robots协议,像个“流氓”;
4、不支持集群;
5、采用关系型数据库,而没有使用NOSQL数据库;
这些内伤有的影响了爬虫的性能,有的限制了爬虫的成长,有的则使爬虫看起来像个“流氓”,所以在未来的2012上半年,需要解决这些问题。目前的打算如下:
爬虫改定向爬取为定向爬取与全网爬取共存后,爬虫需要自动跟踪链接、抽取文本,所以要用到主题识别技术、网页切片技术和网页权重分析技术;
系统应该提供一个默认的插件,来兼容绝大部分网页,但要保留现有的插件模式;
为爬虫加入robots协议的支持,使其变成“正规军”;
好的爬虫当然是要支持集群的,目前考虑采用apache的hadoop来做分布式的爬虫;
URL数据存储在关系型数据库中对爬虫性能的影响十分明显,稍后要用MongoDB来取代关系型数据库来管理URL数据
网上已有很多开源爬虫,笔者也研究过好几款,只能说良莠不齐吧,且笔者觉得大多爬虫采用的技术都比较老,而且普遍存在一个问题,就是对网页权重分析和URL链接管理做得很不到位,或者干脆就没有做,不明白为什么。不过作为开源软件的一名贡献者,其作者的精神和勇气还是值得钦佩的,在此向所有开源事业的先驱们致敬!
原创文章,转载请注明出处: http://www.yshjava.cn/post/330.html
相关推荐
针对高校思政管理工作中较难对学生的网络舆论情况进行实时监控的问题,文中基于JavaEE技术,设计开发了一款网络舆情的实时监控系统。该系统使用网络爬虫、文本信息处理、语义分析等大数据处理技术,从而实现对学生...
舆情监控系统,Rank网络舆情监测系统,帕拉斯网络舆情监控系统,红麦软件舆情监测系统,Goonie网络舆情监控系统,鹰隼网络舆情监控系统,军犬网络舆情监控系统,麦知讯网络舆情监控系统,"百度指数舆情监控分析 ","清博新...
本资源提供了一套基于Java语言编写的开源免费舆情监测网络监控系统设计源码。该项目包含了3436个JavaScript文件、352个PNG图像文件、274个CSS样式文件、272个SVG图形文件、235个Java源文件、129个HTML文件、61个JPG...
基于python的网络舆情分析系统源码+文档说明(毕业设计)基于python的网络舆情分析系统源码+文档说明(毕业设计)基于python的网络舆情分析系统源码+文档说明(毕业设计)基于python的网络舆情分析系统源码+文档说明...
该论文的标题“基于python的网络舆情分析系统源码数据库论文”表明该论文的主题是基于Python语言和MySQL数据库开发的网络舆情分析系统。该系统的目的是为社会的网络管理部门提供言论分析、言论管理、用户管理等多种...
舆情监控系统是一种用于收集、分析和管理网络上公众舆论的工具,主要帮助企业、政府机构和其他组织及时了解并应对公众对特定事件、品牌或政策的看法。本文将详细介绍这种系统的各个方面。 1. **系统简介** 舆情...
《C#实现网络爬虫与网络舆论监控系统详解》 在信息技术日新月异的今天,网络爬虫作为数据采集的重要工具,对于舆情监控、市场分析等领域起着至关重要的作用。本文将深入探讨如何利用C#语言开发网络爬虫程序,并结合...
基于爬虫与文本挖掘的网络舆情监控系统是一款先进的工具,旨在实时监测和分析互联网上的舆论动态。该系统利用强大的爬虫技术从各种网络资源中获取数据,然后通过文本挖掘算法对数据进行深入处理和分析,以揭示网络上...
政府网络舆情监控系统的实现终稿.pdf
基于事件的网络舆情分析系统源码+项目说明.zip基于事件的网络舆情分析系统源码+项目说明.zip基于事件的网络舆情分析系统源码+项目说明.zip基于事件的网络舆情分析系统源码+项目说明.zip基于事件的网络舆情分析系统...
网络舆情是现代社会中一个至关重要的概念,特别是在互联网时代,它已经成为了政府、企业以及公众关注的焦点。"网络舆情"是指在网络环境中,公众对于特定事件、政策或人物所表达的各种情绪、观点、态度和意见的总和。...
《瞬速互联网舆情监控系统》用户手册主要涵盖了该系统的基本信息、功能特点、使用方法以及相关的监测示例和成功案例,旨在帮助用户更好地理解和操作这一系统。以下是对这些内容的详细解析: 1. 软件背景:这部分...
【网络舆情监控系统】 ...总的来说,本文将全面探讨网络舆情监控系统的设计与实现,包括其重要性、开发技术选择、系统架构和功能实现,以及测试和优化过程,为理解和构建类似系统提供了详实的参考资料。
基于爬虫与文本挖掘的网络舆情监控系统是一款先进的工具,旨在实时监测和分析互联网上的舆论动态。该系统利用强大的爬虫技术从各种网络资源中获取数据,然后通过文本挖掘算法对数据进行深入处理和分析,以揭示网络上...
网络舆情是指公众通过互联网平台对特定事件或议题的舆论态度和看法,它是社会舆情在网络空间中的体现。在当今信息化时代,网络舆情对于社会管理和公共政策制定具有重要影响。以下是网络舆情的一些关键特点: 1. ...
互联网+网络舆情监控系统建设方案
基于Python和HTML实现的舆情监控分析与预测系统源码含数据集(数据可视化).tar基于Python和HTML实现的舆情监控分析与预测系统源码含数据集(数据可视化).tar基于Python和HTML实现的舆情监控分析与预测系统源码含数据集...
舆情监控管理系统是指利用互联网信息采集技术、智能信息处理技术和全文检索技术等多种技术手段,对境内外网络中的新闻网页、论坛、贴吧、博客、微博等网络资源进行全网监控、定向监测和舆情分析的系统。本系统旨在...