spindle 是一个构建在Lucene工具包之上的Web索引/搜索工具.它包括一个用于创建索引的HTTP spider和一个用于搜索这些索引的搜索类。spindle项目提供了一组JSP标签库使得那些基于JSP的站点不需要开发任何Java类就能够增加搜索功能。
http://www.bitmechanic.com/projects/spindle/
Arachnid
Arachnid: 是一个基于Java的web spider框架.它包含一个简单的HTML剖析器能够分析包含HTML内容的输入流.通过实现Arachnid的子类就能够开发一个简单的Web spiders并能够在Web站上的每个页面被解析之后增加几行代码调用。 Arachnid的下载包中包含两个spider应用程序例子用于演示如何使用该框架。 http://arachnid.sourceforge.net/
LARM
LARM能够为Jakarta Lucene搜索引擎框架的用户提供一个纯Java的搜索解决方案。它包含能够为文件,数据库表格建立索引的方法和为Web站点建索引的爬虫。
http://larm.sourceforge.net/
JoBo
JoBo 是一个用于下载整个Web站点的简单工具。它本质是一个Web Spider。与其它下载工具相比较它的主要优势是能够自动填充form(如:自动登录)和使用cookies来处理session。JoBo还有灵活的下载规则(如:通过网页的URL,大小,MIME类型等)来限制下载。
http://www.matuschek.net/software/jobo/index.html
snoics-reptile
snoics -reptile是用纯Java开发的,用来进行网站镜像抓取的工具,可以使用配制文件中提供的URL入口,把这个网站所有的能用浏览器通过GET的方式获取到的资源全部抓取到本地,包括网页和各种类型的文件,如:图片、flash、mp3、zip、rar、exe等文件。可以将整个网站完整地下传至硬盘内,并能保持原有的网站结构精确不变。只需要把抓取下来的网站放到web服务器(如:Apache)中,就可以实现完整的网站镜像。 http://www.blogjava.net/snoics
Web-Harvest
Web-Harvest是一个Java开源Web数据抽取工具。它能够收集指定的Web页面并从这些页面中提取有用的数据。Web-Harvest主要是运用了像XSLT,XQuery,正则表达式等这些技术来实现对text/xml的操作。 http://web-harvest.sourceforge.net
spiderpy
spiderpy是一个基于Python编码的一个开源web爬虫工具,允许用户收集文件和搜索网站,并有一个可配置的界面。 http://pyspider.sourceforge.net/
The Spider Web Network Xoops Mod Team
pider Web Network Xoops Mod是一个Xoops下的模块,完全由PHP语言实现。 http://www.tswn.com/
larbin
larbin是个基于C++的web爬虫工具,拥有易于操作的界面,不过只能跑在LINUX下,在一台普通PC下larbin每天可以爬5百万个页面(当然啦,需要拥有良好的网络)
http://larbin.sourceforge.net/index-eng.html
爬虫存在的问题
1. robots.txt
robots.txt是一个纯文本文件,在这个文件中网站管理者可以声明该网站中不想被robots访问的部分,或者指定搜索引擎只收录指定的内容。
当一个搜索机器人(有的叫搜索蜘蛛)访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,那么搜索机器人就沿着链接抓取。
另外,robots.txt必须放置在一个站点的根目录下,而且文件名必须全部小写。 2. 有些类型的网页难以爬取。例如,使用javascript调用的页面、需要注册才能访问的页面等。
网络爬虫的相关研究工作
有些类型的网页难以爬取。例如,使用javascript调用的页面、需要注册才能访问的页面等,对于这些网络的爬取被归结为深层网络的挖掘。这些网页可归结为如下几类:(1)通过
填写表单形成对后台再现数据库查询得到的动态页面。(2)由于缺乏被指向的超链接而没有被索引到的页面。(3)需要注册或其他限制访问的页面。(4)可访问的非网页文件。在曾伟辉等人的文章中,对这类问题进行了综述。在王映等人的文章中,提出了使用一个嵌入式的JavaScript引擎来进行动态网页采集的方法。
1. 有些非静态的Web2.0网站的内容动态生成,数据量巨大,难以抓取,例如论坛等网站。在2008年SIGIR中,Yida Wang等提出了一种爬取论坛的爬取方法。
2. 有些网站会限制网络爬虫的爬取,Analia G. Lourenco, Orlando O. Belo 在2006年提出来使用查询日志的方法限制网络爬虫的活动以减轻服务器压力。
3. 网络上的网页数量太大,在爬取时需要考虑爬取的时间及效率等问题,UCLA的Junghoo Cho等提出了使用并行的crawler的方法。 4. 主题网络爬虫研究
未来研究方向
分布式网络爬虫 并行网络爬虫
特定领域如论坛,博客等的爬取 关于Ajax技术的深层网络爬虫研究。 多媒体网络爬虫研究
对等网络(P2P,Peer to Peer)网络爬虫
参考文献:
[1] 谢国强等,《基于Web的网络爬虫技术研究》
[2] Yida Wang etc. Exploring Traversal Strategy for Web Forum Crawling, sigir’ 08
[3] Junghoo Cho(UCLA), Hector Garcia-Molina( Standford), Parallel Crawlers, WWW2002
[4] Analia Lourenco etc, Catching Web Crawlers in the Act, ICWE’06 [5] 曾伟辉等,《深层网络爬虫研究综述》,计算机系统应用 2008年第5期
[6] 王映、于满泉等,《JavaScript引擎在动态网页采集技术中的应用》,中科院计算所、微软亚洲研究院
网络爬虫调研报告
基本原理
Spider概述
Spider即网络爬虫 ,其定义有广义和狭义之分。狭义上指遵循标准的 http协议利用超链接和 Web文档检索的方法遍历万维网信息空间的软件程序 ;而广义的定义则是所有能遵循 http协议检索 Web文档的软件都称之为网络爬虫。
Spider是一个功能很强的自动提取网页的程序 ,它为搜索引擎从万维网上下载网页 ,是搜索引擎的重要组成 .它通过请求站点上的 HTML文档访问某一站点。它遍历 Web空间 ,不断从一个站点移动到另一个站点 ,自动建立索引 ,并加入到网页数据库中。网络爬虫进入某个超级文本时 ,它利用 HTML语言的标记结构来搜索信息及获取指向其他超级文本的 URL地址 ,可以完全不依赖用户干预实现网络上的自动爬行和搜索。
Spider的队列
(1)等待队列 :新发现的 URL被加入到这个队列 ,等待被 Spider程序处理 ; (2)处理队列 :要被处理的 URL被传送到这个队列。为了避免同一个 URL被多次处理 ,当一个 URL被处理过后 ,它将被转移到完成队列或者错误队列 (如果发生错误 )。
(3)错误队列 :如果在下载网页是发生错误 ,该 URL将被加入 到错误队列。 (4)完成队列 :如果在处理网页没有发生错误 ,该 URL将被加入到完成队列。
网络爬虫搜索策略
在抓取网页的时候 ,目前网络爬虫一般有两种策略 :无主题搜索与基于某特定主体的专业智能搜索。其中前者主要包括 :广度优先和深度优先。广度优先是指网络爬虫会先抓取起始网页中链接的所有网页 ,然后再选择其中的一个链接网页 ,继续抓取在此网页中链接的所有网页。这是最常用的方式,因为这个方法可以让网络爬虫并行处理 ,提高其抓取速度。深度优先是指网络爬虫会从起始页开始 ,一个链接一个链接跟踪下去 ,处理完这条线路之后再转入下一个起始页 ,继续跟踪链接。这个方法有个优点是网络爬虫在设计的时候比较容易。大多数网页爬行器采用宽度优先搜索策略或者是对这种策略的某些改进。
在专业搜索引擎中 ,网络爬虫的任务是获取 Web页面和决定链接的访问顺序 ,它通常从一个 “种子集 ”(如用户查询、种子链接或种子页面 )发,以迭代的方式访问页面和提取链接。搜索过程中 ,未访问的链接被暂存在一个称为 “搜索前沿 ”(Spider Frontier)的队列中 ,网络爬虫根据搜索前沿中链接的 “重要程度 ”决定下一个要访问的链接。如何评价和预测链接的 “重要程度 ”(或称价值 )是决定网络爬虫搜索策略的关键。
众多的网络爬虫设计各不相同 ,但归根结底是采用不同的链接价值评价标准。
常用开源网络爬虫介绍及其比较
Nutch
开发语言:Java
http://lucene.apache.org/nutch/ 简介:

