不知不觉,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://yshjava.iteye.com/blog/1338896
<!--EndFragment-->
分享到:
相关推荐
针对高校思政管理工作中较难对学生的网络舆论情况进行实时监控的问题,文中基于JavaEE技术,设计开发了一款网络舆情的实时监控系统。该系统使用网络爬虫、文本信息处理、语义分析等大数据处理技术,从而实现对学生...
网络舆情监测系统方案建议书 网络舆情监测系统是一种解决方案,旨在对互联网舆情进行实时监测和分析,以帮助企业、政府和个人更好地了解公众舆论、形势和趋势。下面是该系统的详细说明和关键技术点。 1. 互联网...
网络舆情监测系统是一种用于监测和分析互联网舆情的系统,它可以实时监控互联网上的舆情动态,挖掘舆情信息,并提供智能化的舆情分析和报表生成功能。下面是该系统的详细知识点: 1. 互联网舆情系统概述 互联网...
本资源提供了一套基于Java语言编写的开源免费舆情监测网络监控系统设计源码。该项目包含了3436个JavaScript文件、352个PNG图像文件、274个CSS样式文件、272个SVG图形文件、235个Java源文件、129个HTML文件、61个JPG...
基于事件的网络舆情分析系统源码+项目说明.zip基于事件的网络舆情分析系统源码+项目说明.zip基于事件的网络舆情分析系统源码+项目说明.zip基于事件的网络舆情分析系统源码+项目说明.zip基于事件的网络舆情分析系统...
该论文的标题“基于python的网络舆情分析系统源码数据库论文”表明该论文的主题是基于Python语言和MySQL数据库开发的网络舆情分析系统。该系统的目的是为社会的网络管理部门提供言论分析、言论管理、用户管理等多种...
舆情监控系统,Rank网络舆情监测系统,帕拉斯网络舆情监控系统,红麦软件舆情监测系统,Goonie网络舆情监控系统,鹰隼网络舆情监控系统,军犬网络舆情监控系统,麦知讯网络舆情监控系统,"百度指数舆情监控分析 ","清博新...
基于微格式的分布式网络舆情监测系统是一种用于实时监控和分析网络上公众情绪和观点的高级技术解决方案。该系统设计的目标是解决传统集中式舆情监测系统的局限性,如误报率高和响应不及时的问题。在集中式系统中,...
总结来说,基于大数据的网络舆情监测系统旨在通过先进的数据处理技术和智能化分析手段,构建一个实时、全面、准确的舆情监控平台,以帮助企业、政府机构等及时了解公众意见,预防和解决潜在的舆论危机。该系统的设计...
《C#实现网络爬虫与网络舆论监控系统详解》 在信息技术日新月异的今天,网络爬虫作为数据采集的重要工具,对于舆情监控、市场分析等领域起着至关重要的作用。本文将深入探讨如何利用C#语言开发网络爬虫程序,并结合...
基于数据挖掘的校园网络舆情监测系统研究与设计.pdf
基于python+django的网络舆情分析系统的实现.zip 运行步骤 需要先安装Python的相关依赖:django==3.2.8, pymysql,requests,pillow,tensorflow==1.14.0,numpy,simpleui,django-import-export使用pip install 安装 ...
"基于深度学习的网络舆情情绪监测系统设计" 本文主要介绍了基于深度学习的网络舆情情绪监测系统设计,旨在解决当前网络舆情监测分析中存在的问题。文章首先介绍了网络舆情的概念和重要性,然后讨论了传统的舆情分析...
大数据精准营销快客网络舆情监测系统概述.pptx
基于Python的网络舆情分析系统
基于爬虫与文本挖掘的网络舆情监控系统是一款先进的工具,旨在实时监测和分析互联网上的舆论动态。该系统利用强大的爬虫技术从各种网络资源中获取数据,然后通过文本挖掘算法对数据进行深入处理和分析,以揭示网络上...
互联网舆情监控系统需求分析是为了实现高效的互联网舆情监测和控制管理,项目建设应完成以下目标: 一、建设目标 1. 对指定主流门户网站(WEB网站)的网页、论坛、数字报、电子杂志、博客、微博、播客、音视频...
网络舆情监测系统是指通过采集、分析和挖掘互联网上的舆情信息,提供舆情监控、舆情分析和舆情预警等功能的系统。该系统可以全面、及时、准确地采集和分析互联网上的舆情信息,为用户提供相关的舆情报告和分析结果,...
当今中国,网民人数已经超过人口总数的一半,因此网络舆情监测具有十分重要的意义。本文首先应用网络爬虫技术实现对新闻报道和对应网民评论文本数据获取。因为数据量大,所以选择Hadoop集群进行文本数据储存。其次,通过...