`
杨胜寒
  • 浏览: 284643 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

分享:网络舆情监控系统爬虫子系统开发心得与不足

阅读更多

不知不觉,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

 

 

 

 

 

  • 大小: 74.8 KB
  • 大小: 200 KB
10
1
分享到:
评论
26 楼 guoyongfei 2013-02-26  
楼主,希望能发份代码研究研究,lonsh@163.com。
25 楼 chucklee 2012-08-15  
杨胜寒 写道
matraxa 写道
博主能否开放源码看看,或发我邮箱matraxa@163.com 非常愿意与您交流

这是公司的商业项目,所以源码暂时不方便公开。但是我自己也有意向为中国开源软件事业做一点点微薄的贡献,目前已经在做准备工作了,快的话,国庆节前后,我会把代码开源出来。


最近在做一些爬虫方面的工作,个人技术太薄弱了,只会使用jsoup做一些单机版的爬虫,真心希望能够阅读一下博主的代码长长见识,期待啊
24 楼 matraxa 2012-05-31  
杨胜寒 写道
matraxa 写道
博主能否开放源码看看,或发我邮箱matraxa@163.com 非常愿意与您交流

这是公司的商业项目,所以源码暂时不方便公开。但是我自己也有意向为中国开源软件事业做一点点微薄的贡献,目前已经在做准备工作了,快的话,国庆节前后,我会把代码开源出来。

楼主能否分享一下怎么使用htmlunit解析动态网页吗?比如对页面中的"下一页"这种按钮进行解析。方便的话联系我的邮箱matraxa@163.com 请多多指教,谢谢
23 楼 杨胜寒 2012-05-30  
matraxa 写道
博主能否开放源码看看,或发我邮箱matraxa@163.com 非常愿意与您交流

这是公司的商业项目,所以源码暂时不方便公开。但是我自己也有意向为中国开源软件事业做一点点微薄的贡献,目前已经在做准备工作了,快的话,国庆节前后,我会把代码开源出来。
22 楼 matraxa 2012-05-30  
博主能否开放源码看看,或发我邮箱matraxa@163.com 非常愿意与您交流
21 楼 beneo 2012-04-03  
后续数据挖掘工作能否介绍一下
20 楼 feixiongzaixian 2012-02-18  
本人最近在研究这方面的技术,版主能不能开放点源码看看啊~
19 楼 杨胜寒 2012-01-11  
lzj0470 写道
杨胜寒 写道
lzj0470 写道
杨胜寒 写道
wxq594808632 写道
杨胜寒 写道
lzj0470 写道
你怎么控制不让别人屏蔽你的爬虫?直接封杀你的IP段。

爬虫在采集页面时完全模拟浏览器环境包括表单提交和链接点击,所以常规的爬虫过滤规则无法识别该爬虫。但是如果目标站点的过滤规则比较严格(比如ITEye)或者有意封杀绝大部分爬虫的话,就目前而言,爬虫是无法逃过的。年后会考虑在集群环境下轮流切换不同节点的爬虫对同一目标站点进行采集任务,同时也会结合验证码识别及其他技术手段来规避和克服目标站点的反爬虫技术。


笑而不语...

难倒您有更好的方法?不妨讲出来大家交流一下,

兄弟,首先,谢谢你的答复。
不过,还是有几个问题。
1、你是否考虑过,网站是不需要过滤规则也可以知道你是恶意采集?
如:通过记录IP的访问频繁次数。
2、关于验证码,我也很感兴趣,不知道有什么心得,尤其是捏在一起,高度模糊等等,怎么做处理?
3、不管是采用XPATH还是Htmlparse,都会存在一个问题,开发周期长,维护成本高。
如:假设,需要跟踪100个网站,那么,是否需要分析100次,或者更多次,因为每个网站的每个频道分析规则可能不一样。

首先声明一点,笔者十分反对对目标站点的恶意采集,而更加支持通过优化爬虫算法、调整爬取策略来实现双赢局面。然后这里推荐一篇文章http://robbin.iteye.com/blog/451014简明的分析了当下互联网站点的反爬虫策略,很有代表性。
最后,针对你提出的三个问题,做如下答复:
1、其实这个问题robbin的博文中已有答复,不妨再说一下,这个问题可以通过分布式集群、动态IP、代理以及低频率的爬取等方法来规避此类常规反爬虫策略;
2、关于验证码的问题,在笔者看来验证码识别是个非常高深、非常耗时的技术领域,不是心浮气躁的人所适合的,同时也不是一天两天就能有成效的。笔者研究验证码也只有半年时间,所以在此也不敢妄自说些什么。不过在验证码破解技术取得突破之前可以结合人工来突破目标站点的验证码限制;
3、XPath无疑是实现页面数据精确挖掘的最佳选择。至于你说的“开发周期长,维护成本高”的问题,我觉得是不存在的,至少我没有遇到过。目前的爬虫对于收录站点采取如下措施:收录之前,由人工分析目标站点页面结构,得到相关数据的XPath,然后写入配置文件,爬虫的默认插件将加载并使用这些数据,如果这个站点比较特殊,如非主流的分页规则、Ajax生成数据等,则需要单独写一个插件,但从实际结果来看,从分析页面结构到基于插件模板写一个针对性的插件,所需时间不超过一天,同时基本不存在维护成本问题,除非目标站点页面结构发生变化,因为目前大多数站点的页面都是基于模板生成,所以这种变化很少很漫长。
当然啦,下一步也会结合在机器学习和人工智能方面的技术积累,使爬虫逐渐摆脱人工依赖而走向智能化、自主化。

好的。非常谢谢你的答复。关于第三个话题,我们可能讨论的不是一个方向。我曾经用过楼主类似的办法(httpclient+htmparse)进行分析300多个网站。体会到挨个分析的痛苦。
第一,开发周期长。挨个分析,毕竟是要花时间。不管多长,累加起来的时间也算是长了。如:分析1000个网站,按照你的办法,你估计多少天完成,能坚持不?
第二,维护成本高。挨个分析,网站结构稍微一变,估计是无法对该网站进行采集了。那么,又得重新开始分析过(做着重复工作,算是成本高一个因素了吧)。虽然,网站结构变的概率是很低,但是,还是存在。这样,起码要请一两个专员来看着。

我不是很清楚你都分析页面的哪些东西,我们这边是这样做的:比如要收录百度贴吧的数据,那么在浏览器中打开某个帖子的页面后,使用IE或火狐的插件,比如IE的F12,来查找爬虫关心的数据的在页面中的XPath路径,很快,十几分钟就搞定,加上分页规则分析、配置文件生成等工作,也不超过一个个小时,如果要为此站点单独写一个插件,需要的时间就长一点,一半就是半天到一天。事实上,确实像你说的那样,公司确实安排了专员来看着爬虫,分析他们的日志,观察目标站点是否发生变化,不过工作量不大,只有一个人在做。
像这种重复性的工作,可能每个程序员出于本能都会很反感,都会寻求一种以程序代替人工的解决之道。当然,我也不例外,目前的解决方案是,编写了一套通用的插件,来适配大多数站点,遇到非主流的站点,才为其单独写一个插件,以此减少重复的工作量,缩短周期。
对于你提出的那个问题,我初步估算了一下,如果一个人来做,至少需要三四个月,这是最少的了,且没有考虑其他意外情况。时间确实有点长,而这也正是2012年要努力和改进的地方。感谢你的提醒!
18 楼 lzj0470 2012-01-11  
杨胜寒 写道
lzj0470 写道
杨胜寒 写道
wxq594808632 写道
杨胜寒 写道
lzj0470 写道
你怎么控制不让别人屏蔽你的爬虫?直接封杀你的IP段。

爬虫在采集页面时完全模拟浏览器环境包括表单提交和链接点击,所以常规的爬虫过滤规则无法识别该爬虫。但是如果目标站点的过滤规则比较严格(比如ITEye)或者有意封杀绝大部分爬虫的话,就目前而言,爬虫是无法逃过的。年后会考虑在集群环境下轮流切换不同节点的爬虫对同一目标站点进行采集任务,同时也会结合验证码识别及其他技术手段来规避和克服目标站点的反爬虫技术。


笑而不语...

难倒您有更好的方法?不妨讲出来大家交流一下,

兄弟,首先,谢谢你的答复。
不过,还是有几个问题。
1、你是否考虑过,网站是不需要过滤规则也可以知道你是恶意采集?
如:通过记录IP的访问频繁次数。
2、关于验证码,我也很感兴趣,不知道有什么心得,尤其是捏在一起,高度模糊等等,怎么做处理?
3、不管是采用XPATH还是Htmlparse,都会存在一个问题,开发周期长,维护成本高。
如:假设,需要跟踪100个网站,那么,是否需要分析100次,或者更多次,因为每个网站的每个频道分析规则可能不一样。

首先声明一点,笔者十分反对对目标站点的恶意采集,而更加支持通过优化爬虫算法、调整爬取策略来实现双赢局面。然后这里推荐一篇文章http://robbin.iteye.com/blog/451014简明的分析了当下互联网站点的反爬虫策略,很有代表性。
最后,针对你提出的三个问题,做如下答复:
1、其实这个问题robbin的博文中已有答复,不妨再说一下,这个问题可以通过分布式集群、动态IP、代理以及低频率的爬取等方法来规避此类常规反爬虫策略;
2、关于验证码的问题,在笔者看来验证码识别是个非常高深、非常耗时的技术领域,不是心浮气躁的人所适合的,同时也不是一天两天就能有成效的。笔者研究验证码也只有半年时间,所以在此也不敢妄自说些什么。不过在验证码破解技术取得突破之前可以结合人工来突破目标站点的验证码限制;
3、XPath无疑是实现页面数据精确挖掘的最佳选择。至于你说的“开发周期长,维护成本高”的问题,我觉得是不存在的,至少我没有遇到过。目前的爬虫对于收录站点采取如下措施:收录之前,由人工分析目标站点页面结构,得到相关数据的XPath,然后写入配置文件,爬虫的默认插件将加载并使用这些数据,如果这个站点比较特殊,如非主流的分页规则、Ajax生成数据等,则需要单独写一个插件,但从实际结果来看,从分析页面结构到基于插件模板写一个针对性的插件,所需时间不超过一天,同时基本不存在维护成本问题,除非目标站点页面结构发生变化,因为目前大多数站点的页面都是基于模板生成,所以这种变化很少很漫长。
当然啦,下一步也会结合在机器学习和人工智能方面的技术积累,使爬虫逐渐摆脱人工依赖而走向智能化、自主化。

好的。非常谢谢你的答复。关于第三个话题,我们可能讨论的不是一个方向。我曾经用过楼主类似的办法(httpclient+htmparse)进行分析300多个网站。体会到挨个分析的痛苦。
第一,开发周期长。挨个分析,毕竟是要花时间。不管多长,累加起来的时间也算是长了。如:分析1000个网站,按照你的办法,你估计多少天完成,能坚持不?
第二,维护成本高。挨个分析,网站结构稍微一变,估计是无法对该网站进行采集了。那么,又得重新开始分析过(做着重复工作,算是成本高一个因素了吧)。虽然,网站结构变的概率是很低,但是,还是存在。这样,起码要请一两个专员来看着。
17 楼 杨胜寒 2012-01-11  
lzj0470 写道
杨胜寒 写道
wxq594808632 写道
杨胜寒 写道
lzj0470 写道
你怎么控制不让别人屏蔽你的爬虫?直接封杀你的IP段。

爬虫在采集页面时完全模拟浏览器环境包括表单提交和链接点击,所以常规的爬虫过滤规则无法识别该爬虫。但是如果目标站点的过滤规则比较严格(比如ITEye)或者有意封杀绝大部分爬虫的话,就目前而言,爬虫是无法逃过的。年后会考虑在集群环境下轮流切换不同节点的爬虫对同一目标站点进行采集任务,同时也会结合验证码识别及其他技术手段来规避和克服目标站点的反爬虫技术。


笑而不语...

难倒您有更好的方法?不妨讲出来大家交流一下,

兄弟,首先,谢谢你的答复。
不过,还是有几个问题。
1、你是否考虑过,网站是不需要过滤规则也可以知道你是恶意采集?
如:通过记录IP的访问频繁次数。
2、关于验证码,我也很感兴趣,不知道有什么心得,尤其是捏在一起,高度模糊等等,怎么做处理?
3、不管是采用XPATH还是Htmlparse,都会存在一个问题,开发周期长,维护成本高。
如:假设,需要跟踪100个网站,那么,是否需要分析100次,或者更多次,因为每个网站的每个频道分析规则可能不一样。

首先声明一点,笔者十分反对对目标站点的恶意采集,而更加支持通过优化爬虫算法、调整爬取策略来实现双赢局面。然后这里推荐一篇文章http://robbin.iteye.com/blog/451014简明的分析了当下互联网站点的反爬虫策略,很有代表性。
最后,针对你提出的三个问题,做如下答复:
1、其实这个问题robbin的博文中已有答复,不妨再说一下,这个问题可以通过分布式集群、动态IP、代理以及低频率的爬取等方法来规避此类常规反爬虫策略;
2、关于验证码的问题,在笔者看来验证码识别是个非常高深、非常耗时的技术领域,不是心浮气躁的人所适合的,同时也不是一天两天就能有成效的。笔者研究验证码也只有半年时间,所以在此也不敢妄自说些什么。不过在验证码破解技术取得突破之前可以结合人工来突破目标站点的验证码限制;
3、XPath无疑是实现页面数据精确挖掘的最佳选择。至于你说的“开发周期长,维护成本高”的问题,我觉得是不存在的,至少我没有遇到过。目前的爬虫对于收录站点采取如下措施:收录之前,由人工分析目标站点页面结构,得到相关数据的XPath,然后写入配置文件,爬虫的默认插件将加载并使用这些数据,如果这个站点比较特殊,如非主流的分页规则、Ajax生成数据等,则需要单独写一个插件,但从实际结果来看,从分析页面结构到基于插件模板写一个针对性的插件,所需时间不超过一天,同时基本不存在维护成本问题,除非目标站点页面结构发生变化,因为目前大多数站点的页面都是基于模板生成,所以这种变化很少很漫长。
当然啦,下一步也会结合在机器学习和人工智能方面的技术积累,使爬虫逐渐摆脱人工依赖而走向智能化、自主化。
16 楼 lzj0470 2012-01-11  
杨胜寒 写道
wxq594808632 写道
杨胜寒 写道
lzj0470 写道
你怎么控制不让别人屏蔽你的爬虫?直接封杀你的IP段。

爬虫在采集页面时完全模拟浏览器环境包括表单提交和链接点击,所以常规的爬虫过滤规则无法识别该爬虫。但是如果目标站点的过滤规则比较严格(比如ITEye)或者有意封杀绝大部分爬虫的话,就目前而言,爬虫是无法逃过的。年后会考虑在集群环境下轮流切换不同节点的爬虫对同一目标站点进行采集任务,同时也会结合验证码识别及其他技术手段来规避和克服目标站点的反爬虫技术。


笑而不语...

难倒您有更好的方法?不妨讲出来大家交流一下,

兄弟,首先,谢谢你的答复。
不过,还是有几个问题。
1、你是否考虑过,网站是不需要过滤规则也可以知道你是恶意采集?
如:通过记录IP的访问频繁次数。
2、关于验证码,我也很感兴趣,不知道有什么心得,尤其是捏在一起,高度模糊等等,怎么做处理?
3、不管是采用XPATH还是Htmlparse,都会存在一个问题,开发周期长,维护成本高。
如:假设,需要跟踪100个网站,那么,是否需要分析100次,或者更多次,因为每个网站的每个频道分析规则可能不一样。
15 楼 杨胜寒 2012-01-11  
wxq594808632 写道
杨胜寒 写道
lzj0470 写道
你怎么控制不让别人屏蔽你的爬虫?直接封杀你的IP段。

爬虫在采集页面时完全模拟浏览器环境包括表单提交和链接点击,所以常规的爬虫过滤规则无法识别该爬虫。但是如果目标站点的过滤规则比较严格(比如ITEye)或者有意封杀绝大部分爬虫的话,就目前而言,爬虫是无法逃过的。年后会考虑在集群环境下轮流切换不同节点的爬虫对同一目标站点进行采集任务,同时也会结合验证码识别及其他技术手段来规避和克服目标站点的反爬虫技术。


笑而不语...

难倒您有更好的方法?不妨讲出来大家交流一下,
14 楼 wxq594808632 2012-01-11  
杨胜寒 写道
lzj0470 写道
你怎么控制不让别人屏蔽你的爬虫?直接封杀你的IP段。

爬虫在采集页面时完全模拟浏览器环境包括表单提交和链接点击,所以常规的爬虫过滤规则无法识别该爬虫。但是如果目标站点的过滤规则比较严格(比如ITEye)或者有意封杀绝大部分爬虫的话,就目前而言,爬虫是无法逃过的。年后会考虑在集群环境下轮流切换不同节点的爬虫对同一目标站点进行采集任务,同时也会结合验证码识别及其他技术手段来规避和克服目标站点的反爬虫技术。


笑而不语...
13 楼 杨胜寒 2012-01-11  
步履不停 写道
赞~~我用HttpClient和HtmlParser获取论坛图片的小程序,主要获取模拟登录后论坛帖子的图片信息,在下载图片的时候用openstream打开url,但是只能下载到一部分,程序就中途就卡住了,我网上查了下说是IO阻塞线程挂起了。请问,你是如何解决下载这些资源的?

这是之前第二版爬虫使用的一个文件下载工具类里的一个核心方法,从第三版爬虫开始,包括网页快照、图片、CSS等,都是通过HtmlUnit来保存的。HtmlUnit基于HttpClient封转,功能更强,使用更简单,你可以尝试一下。
12 楼 杨胜寒 2012-01-11  
步履不停 写道
赞~~我用HttpClient和HtmlParser获取论坛图片的小程序,主要获取模拟登录后论坛帖子的图片信息,在下载图片的时候用openstream打开url,但是只能下载到一部分,程序就中途就卡住了,我网上查了下说是IO阻塞线程挂起了。请问,你是如何解决下载这些资源的?

public String download(URL url, String fileName, String path) throws Exception {
        try {
            HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();
            String file=path + fileName;
            RandomAccessFile oSavedFile = new RandomAccessFile(file, "rw");
            httpConnection.setRequestProperty("User-Agent", "Internet Explorer");
            int nStartPos = 0;
            int nRead = 0;
            String sProperty = "bytes=" + nStartPos + "-";
            //告诉服务器这个文件从nStartPos字节开始传
            httpConnection.setRequestProperty("RANGE", sProperty);
            InputStream input = httpConnection.getInputStream();
            byte[] b = new byte[1024];
            //读取网络文件,写入指定的文件中
            while ((nRead = input.read(b, 0, 1024)) > 0) {
                oSavedFile.write(b, 0, nRead);
                nStartPos += nRead;
            }
            oSavedFile.close();
            input.close();
            httpConnection.disconnect();
            return fileName;
        } catch (Exception e) {
            //e.printStackTrace();
            throw new Exception("下载文件失败!" + e.getMessage());
        }
    }
11 楼 步履不停 2012-01-11  
赞~~我用HttpClient和HtmlParser获取论坛图片的小程序,主要获取模拟登录后论坛帖子的图片信息,在下载图片的时候用openstream打开url,但是只能下载到一部分,程序就中途就卡住了,我网上查了下说是IO阻塞线程挂起了。请问,你是如何解决下载这些资源的?
10 楼 杨胜寒 2012-01-10  
杨胜寒 写道
lzj0470 写道
你怎么控制不让别人屏蔽你的爬虫?直接封杀你的IP段。

爬虫在采集页面时完全模拟浏览器环境包括表单提交和链接点击,所以常规的爬虫过滤规则无法识别该爬虫。但是如果目标站点的过滤规则比较严格(比如ITEye)或者有意封杀绝大部分爬虫的话,就目前而言,爬虫是无法逃过的。年后会考虑在集群环境下轮流切换不同节点的爬虫对同一目标站点进行采集任务,同时也会结合验证码识别及其他技术手段来规避和克服目标站点的反爬虫技术。

当然了,作为一个真正意义的爬虫,是不应该无限制的疯狂抓取目标站点页面的,因为这是不道德的,同时也是爬虫无能的具体表现。好的爬虫能够做到最少的宽带占用,同时给目标服务器带来最小的压力,当然我目前也正在超这方面努力。如果做到这一点,加之在遵守robots协议的情况下有节制的数据采集,大部分的站点都会允许你的爬虫活动。
9 楼 杨胜寒 2012-01-10  
lzj0470 写道
你怎么控制不让别人屏蔽你的爬虫?直接封杀你的IP段。

爬虫在采集页面时完全模拟浏览器环境包括表单提交和链接点击,所以常规的爬虫过滤规则无法识别该爬虫。但是如果目标站点的过滤规则比较严格(比如ITEye)或者有意封杀绝大部分爬虫的话,就目前而言,爬虫是无法逃过的。年后会考虑在集群环境下轮流切换不同节点的爬虫对同一目标站点进行采集任务,同时也会结合验证码识别及其他技术手段来规避和克服目标站点的反爬虫技术。
8 楼 lzj0470 2012-01-10  
你怎么控制不让别人屏蔽你的爬虫?直接封杀你的IP段。
7 楼 杨胜寒 2012-01-10  
comsci 写道
不错哦。。加油。。。如果能够智能识别网页内容是否是负面信息和带有情绪性的语言就更加有价值了

像你说的这种的需求,对于舆情监控系统而言,往往不是由爬虫来做的,而是有另外一个子系统来做——我们称之为“智能数据分析子系统”,专门用来分析爬虫抓取到的帖子、新闻、博客等数据是否是负面信息,是否是热点信息,是否是与“我”相关的信息,以及信息的传播路径、分布趋势、研判指数等数据,这是舆情监控系统的核心价值和竞争力所在。为了保证爬虫的速度和效率,这些工作被从爬虫系统中分拆出来。

相关推荐

Global site tag (gtag.js) - Google Analytics