开源网络爬虫程序(spider)一览
2007.10.15 来自:OliverSegal's blog 共有评论(4)条 发表评论 收藏
spider是搜索引擎的必须模块.spider数据的结果直接影响到搜索引擎的评价指标.第一个spider程序由MIT的Matthew K Gray操刀该程序的目的是为了统计互联网中主机的数目。WebLech URL Spider.PySolitaire (Python Solita
老板心里你有多重?
确立职场位置,明确自身重要性 Leo教你看清前途国内首个对外开放企业学苑
中创中间件倾力奉献 全部报表开发课程免费学习东方标准 Java高端培训
为IT企业定向培训 推荐就业-月薪4000起程序员的秘密"法宝"
协同开发 技术支持 远在天边 近在咫尺 免费注册使用 注册还送小礼物
spider是搜索引擎的必须模块.spider数据的结果直接影响到搜索引擎的评价指标.
第一个spider程序由MIT的Matthew K Gray操刀该程序的目的是为了统计互联网中主机的数目
>Spier定义(关于Spider的定义,有广义和狭义两种).
狭义:利用标准的http协议根据超链和web文档检索的方法遍历万维网信息空间的软件程序.
广义:所有能利用http协议检索web文档的软件都称之为spider.
其中Protocol Gives Sites Way To Keep Out The ′Bots Jeremy Carl, Web Week, Volume 1, Issue 7, November 1995 是和spider息息相关的协议,大家有兴趣参考robotstxt.org.
Heritrix
Heritrix is the Internet Archive′s open-source, extensible, web-scale, archival-quality web crawler project.
Heritrix (sometimes spelled heretrix, or misspelled or missaid as heratrix/heritix/ heretix/heratix) is an archaic word for heiress (woman who inherits). Since our crawler seeks to collect and preserve the digital artifacts of our culture for the benefit of future researchers and generations, this name seemed apt.
语言:JAVA
WebLech URL Spider
WebLech is a fully featured web site download/mirror tool in Java, which supports many features required to download websites and emulate standard web-browser behaviour as much as possible. WebLech is multithreaded and comes with a GUI console.
语言:JAVA
JSpider
A Java implementation of a flexible and extensible web spider engine. Optional modules allow functionality to be added (searching dead links, testing the performance and scalability of a site, creating a sitemap, etc ..
语言:JAVA
WebSPHINX
WebSPHINX is a web crawler (robot, spider) Java class library, originally developed by Robert Miller of Carnegie Mellon University. Multithreaded, tollerant HTML parsing, URL filtering and page classification, pattern matching, mirroring, and more...
语言:JAVA
PySolitaire
PySolitaire is a fork of PySol Solitaire that runs correctly on Windows and has a nice clean installer. PySolitaire (Python Solitaire) is a collection of more than 300 solitaire and Mahjongg games like Klondike and Spider.
语言:Python
The Spider Web Network Xoops Mod Team
The Spider Web Network Xoops Module Team provides modules for the Xoops community written in the PHP coding language. We develop mods and or take existing php script and port it into the Xoops format. High quality mods is our goal.
语言:php
Fetchgals
A multi-threaded web spider that finds free porn thumbnail galleries by visiting a list of known TGPs (Thumbnail Gallery Posts). It optionally downloads the located pictures and movies. TGP list is included. Public domain perl script running on Linux.
语言:perl
Where Spider
The purpose of the Where Spider software is to provide a database system for storing URL addresses. The software is used for both ripping links and browsing them offline. The software uses a pure XML database which is easy to export and import.
语言:XML
Sperowider
Sperowider Website Archiving Suite is a set of Java applications, the primary purpose of which is to spider dynamic websites, and to create static distributable archives with a full text search index usable by an associated Java applet.
语言:Java
SpiderPy
SpiderPy is a web crawling spider program written in Python that allows users to collect files and search web sites through a configurable interface.
语言:Python
Spidered Data Retrieval
Spider is a complete standalone Java application designed to easily integrate varied datasources. * XML driven framework * Scheduled pulling * Highly extensible * Provides hooks for custom post-processing and configuration
语言:Java
webloupe
WebLoupe is a java-based tool for analysis, interactive visualization (sitemap), and exploration of the information architecture and specific properties of local or publicly accessible websites. Based on web spider (or web crawler) technology.
语言:java
ASpider
Robust featureful multi-threaded CLI web spider using apache commons httpclient v3.0 written in java. ASpider downloads any files matching your given mime-types from a website. Tries to reg.exp. match emails by default, logging all results using log4j.
语言:java
larbin
Larbin is an HTTP Web crawler with an easy interface that runs under Linux. It can fetch more than 5 million pages a day on a standard PC (with a good network).
语言:C++
高强度爬虫程序Baiduspider+(+http://www.baidu.com/search/spider.htm) 百度爬虫 高强度爬虫,有时会从多个IP地址启动多个爬虫程序!http://help.yahoo.com/help/us/ysearch/slurp) 雅虎爬虫,分别是雅虎中国和美国
高强度爬虫程序
Baiduspider+(+http://www.baidu.com/search/spider.htm)
百度爬虫
高强度爬虫,有时会从多个IP地址启动多个爬虫程序!
由于算法问题,百度爬虫对相同页面会多次发出请求(尤其是首页),令人烦恼。
推广效果好。
Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)
Mozilla/5.0 (compatible; Yahoo! Slurp;
http://help.yahoo.com/help/us/ysearch/slurp)
雅虎爬虫,分别是雅虎中国和美国总部的爬虫
高强度爬虫,有时会从多个IP地址启动多个爬虫程序!
比较规范的爬虫,看参考其网址,设定爬虫访问间隔。(但需要考虑同时出现多个yahoo爬虫)
推广效果尚可。
iaskspider/2.0(+http://iask.com/help/help_index.html)
Mozilla/5.0 (compatible; iaskspider/1.0; MSIE 6.0)
新浪爱问爬虫
算法差,大量扫描无实际意义的页面,对动态链接网站负担很大
推广效果差。
sogou spider
搜狗爬虫
算法差,大量扫描无实际意义的页面,对动态链接网站负担很大
推广效果差。
中等强度爬虫程序
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Google爬虫
算法优秀,多为访问有实际内容的页面
推广效果好。
Mediapartners-Google/2.1
google点击广告爬虫
特点未知
OutfoxBot/0.5 (for internet experiments; http://; outfoxbot@gmail.comoutfoxbot@gmail.com )
网易爬虫
其搜索算法需要改进
推广效果差。
ia_archiver
Alexa排名爬虫
作用未知
其他搜索引擎的爬虫
msnbot/1.0 (+http://search.msn.com/msnbot.htm)
MSN爬虫
特点未知
msnbot-media/1.0 (+http://search.msn.com/msnbot.htm)
(欢迎补充资料)
特点未知
Mozilla/4.0(compatible; MSIE 5.0; Windows 98; DigExt)
Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)
Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt; DTS Agent
Mozilla/4.0 (compatible; MSIE 5.00; Windows 98; DigExt)
(欢迎补充资料)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; QihooBot 1.0)
名字上看来是Qihoo的
特点未知
Gigabot
Gigabot/2.0 (http://www.gigablast.com/spider.html)
Gigabot搜索引擎爬虫。已被google收购?(欢迎补充资料)
eApolloBot/1.0 (eApollo search engine robot; http://www.eapollo.com/; eapollo at global-opto dot com)
lanshanbot/1.0
据说是中搜爬虫。(欢迎补充资料)
iearthworm/1.0, iearthworm@yahoo.com.cniearthworm@yahoo.com.cn
TMCrawler
WebNews http.pl
Heritrix是一个爬虫框架,可加如入一些可互换的组件。 它的执行是递归进行的,主要有以下几步: 1。在预定的URI中选择一个。 2。获取URI 3。分析,归档结果 4。选择已经发现的感兴趣的URI。加入预定队列。 5。标记已经处理过的URI
是IA的开放源代码,可扩展的,基于整个Web的,归档网络爬虫工程
Heritrix工程始于2003年初,IA的目的是开发一个特殊的爬虫,对网上的
资源进行归档,建立网络数字图书馆,在过去的6年里,IA已经建立了400TB的数据。
IA期望他们的crawler包含以下几种:
宽带爬虫:能够以更高的带宽去站点爬。
主题爬虫:集中于被选择的问题。
持续爬虫:不仅仅爬更当前的网页还负责爬日后更新的网页。
实验爬虫:对爬虫技术进行实验,以决定该爬什么,以及对不同协议的爬虫 爬行结果进行分析的。
Heritrix的主页是http://crawler.archive.org/
Heritrix是一个爬虫框架,可加如入一些可互换的组件。
它的执行是递归进行的,主要有以下几步:
1。在预定的URI中选择一个。
2。获取URI
3。分析,归档结果
4。选择已经发现的感兴趣的URI。加入预定队列。
5。标记已经处理过的URI
Heritrix主要有三大部件:范围部件,边界部件,处理器链
范围部件:主要按照规则决定将哪个URI入队。
边界部件:跟踪哪个预定的URI将被收集,和已经被收集的URI,选择下一个 URI,剔除已经处理过的URI。
处理器链:包含若干处理器获取URI,分析结果,将它们传回给边界部件
Heritrix的其余部件有:
WEB管理控制台:大多数都是单机的WEB应用,内嵌JAVA HTTP 服务器。
操作者可以通过选择Crawler命令来操作控制台。
Crawler命令处理部件:包含足够的信息创建要爬的URI。
Servercache(处理器缓存):存放服务器的持久信息,能够被爬行部件随时查到,包括IP地址,历史记录,机器人策略。
处理器链:
预取链:主要是做一些准备工作,例如,对处理进行延迟和重新处理,否决随后的操作。
提取链:主要是获得资源,进行DNS转换,填写请求和响应表单
抽取链:当提取完成时,抽取感兴趣的HTML,JavaScript,通常那里有新的也适合的URI,此时URI仅仅被发现,不会被评估
写链:存储爬行结果,返回内容和抽取特性,过滤完存储。
提交链:做最后的维护,例如,测试那些不在范围内的,提交给边界部件
Heritrix 1.0.0包含以下关键特性:
1.用单个爬虫在多个独立的站点一直不断的进行递归的爬。
2。从一个提供的种子进行爬,收集站点内的精确URI,和精确主机。
3。主要是用广度优先算法进行处理。
4。主要部件都是高效的可扩展的
5。良好的配置,包括:
a。可设置输出日志,归档文件和临时文件的位置
b。可设置下载的最大字节,最大数量的下载文档,和最大的下载时间。
c。可设置工作线程数量。
d。可设置所利用的带宽的上界。
e。可在设置之后一定时间重新选择。
f。包含一些可设置的过滤机制,表达方式,URI路径深度选择等等。
Heritrix的局限:
1。单实例的爬虫,之间不能进行合作。
2。在有限的机器资源的情况下,却要复杂的操作。
3。只有官方支持,仅仅在Linux上进行了测试。
4。每个爬虫是单独进行工作的,没有对更新进行修订。
5。在硬件和系统失败时,恢复能力很差。
6。很少的时间用来优化性能。
搜索引擎Larbin结构分析
作者: 来源:zz 发表时间:2008-09-13 浏览次数: 1036 字号:大 中 小
互联网是一个庞大的非结构化的数据库,将数据有效的检索并组织呈现出来有着巨大的应用前景,尤其是类似RSS的以XML为基础的结构化的数据越来越多,内容的组织方式越来越灵活,检索组织并呈现会有着越来越广泛的应用范围,同时在时效性和可读性上也会有越来越高的要求。这一切的基础是爬虫,信息的来源入口。一个高效,灵活可扩展的爬虫对以上应用都有着无可替代的重要意义。
要设计一个爬虫,首先需要考虑的效率。对于网络而言,基于TCP/IP的通信编程有几种方法。
第一种是单线程阻塞,这是最简单也最容易实现的一种,一个例子:在Shell中通过curl,pcregrep等一系统命令可以直接实现一个简单的爬虫,但同时它的效率问题也显而易见:由于是阻塞方式读取,dns解析,建立连接,写入请求,读取结果这些步骤上都会产生时间的延迟,从而无法有效的利用服务器的全部资源。
第二种是多线程阻塞。建立多个阻塞的线程,分别请求不同的url。相对于第一种方法,它可以更有效的利用机器的资源,特别是网络资源,因为无数线程在同时工作,所以网络会比较充分的利用,但同时对机器CPU资源的消耗也是比较大,在用户级多线程间的频繁切换对于性能的影响已经值得我们考虑。
第三种是单线程非阻塞。这是目前使用的比较多的一种做法,无论在client还是server都有着广泛的应用。在一个线程内打开多个非阻塞的连接,通过poll/epoll/select对连接状态进行判断,在第一时间响应请求,不但充分利用了网络资源,同时也将本机CPU资源的消耗降至最低。这种方法需要对dns请求,连接,读写操作都采用异步非阻塞操作,其中第一种比较复杂,可以采用adns作为解决方案,后面三个操作相对简单可以直接在程序内实现。
效率问题解决后就需要考虑具体的设计问题了。
url肯定需要一个单独的类进行处理,包括显示,分析url,得到主机,端口,文件数据。
然后需要对url进行排重,需要一个比较大的url Hash表。
如果还要对网页内容进行排重,则还需要一个Document Hash表。
爬过的url需要记录下来,由于量比较大,我们将它写到磁盘上,所以还需要一个FIFO的类(记作urlsDisk)。
现在需要爬的url同样需要一个FIFO类来处理,重新开始时,url会从定时从爬过的url FIFO里取出来,写到这个FIFO里。正在运行的爬虫需要从这个FIFO里读数据出来,加入到主机类的url列表里。当然,也会从前一个FIFO里直接读url出来,不过优先级应该比这个里面出来的url低,毕竟是已经爬过的。
爬虫一般是对多个网站进行爬取,但在同时站点内dns的请求可以只做一次,这就需要将主机名独立于url,单独有一个类进行处理。
主机名解析完成后需要有一个解析完成的IP类与之应用,用于connect的时候使用。
HTML文档的解析类也要有一个,用来分析网页,取出里面的url,加入到urlsDisk。
再加上一些字符串,调度类,一个简单的爬虫基本上就完成了。
以上基本上是Larbin的设计思路,Larbin在具体实现上还有一些特殊的处理,例如带了一个webserver,以及对特殊文件的处理。 Larbin有一点设计不不太好,就是慢的访问会越来越多,占用大量的连接,需要改进,另外如果对于大规模的爬虫,这仅仅实现了抓取的部分,要分布式的扩展还需要增加url的集中管理与调度以及前台spider的分布式算法。
Larbin网站爬虫简明使用说明
larbin是一种爬虫工具,我也是前段时间网上看到 Larbin 一种高效的搜索引擎爬虫工具 一文时才知道有这么个东西,初步认定,我比较喜欢这个工具(比起nutch的crawl来说),因为它是C++写的,类似C嘛,我熟,可以自己改改,顺便学习一下C++(几年来的经验告诉我说:改别人的东西来学一种技术比从头写helloworld快很多)。于是开始了我艰辛的larbin试用之旅。
回头看看自己遇到的问题都是由于没认真看文档引起的,唉,老毛病了。下次即使是E文的也得好好看,不能盲目的试,浪费时间。
larbin官方地址:http://larbin.sourceforge.net/index-eng.html
一,编译
这也好说,whahahaha,那是!因为从官方网站下下来的代码不能编译通过(linux gcc下)
./configure
make
gcc -O3 -Wall -D_REENTRANT -c -o parse.o parse.c
parse.c:115: error: conflicting types for ’adns__parse_domain’
internal.h:571: error: previous declaration of ’adns__parse_domain’ was here
parse.c:115: error: conflicting types for ’adns__parse_domain’
internal.h:571: error: previous declaration of ’adns__parse_domain’ was here
gmake[1]: *** [parse.o] 错误 1
gmake[1]: Leaving directory `/home/leo/leo/larbin-2.6.3/adns’
make: *** [all] 错误 2
函数原型和定义不一致这个好改:
打开./adns/internal.h文件,把568-571行直接注释掉就行了
二,运行
这个就不说了,./larbin就运行了,larbin.conf中先进行配置就可以了,这个配置就不说了。。
运行后可以http://host:8081/ 看运
三,结果
哈哈,下班后找了台机子跑了起来,那晚睡觉的时候都梦见自己的搜索引擎赶GOOGLE超BAIDU了,那个兴奋啊。
第二天上班的时候取看结果,发现目录下除了些fifo*文件外什么都没有,那个郁闷。没办法啊,再看文档 How to customize Larbin 发现这么段说明:
The first thing you can define is the module you want to use for ouput. This defines what you want to do with the pages larbin gets. Here are the different options :
DEFAULT_OUTPUT : This module mainly does nothing, except statistics.
SIMPLE_SAVE : This module saves pages on disk. It stores 2000 files per directory (with an index).
MIRROR_SAVE : This module saves pages on disk with the hierarchy of the site they come from. It uses one directory per site.
STATS_OUTPUT : This modules makes some stats on the pages. In order to see the results, see http://localhost:8081/output.html.
靠,默认什么都没输出,于是认真的看了官方网站上仅有的两个文档,修改了options.h再编译,终于有结果了。
我的option中改了:
SIMPLE_SAVE 简单输出一个目录两千个文件,包含索引。
CGILEVEL=0 处理服务器端程序,也就是但url中包含? & = 之类的querString时也处理。
NO_DUP
其余可根据各自需要修改,详见: How to customize Larbin 一文。
三,结果
哈哈,下班后找了台机子跑了起来,那晚睡觉的时候都梦见自己的搜索引擎赶GOOGLE超BAIDU了,那个兴奋啊。
第二天上班的时候取看结果,发现目录下除了些fifo*文件外什么都没有,那个郁闷。没办法啊,再看文档 How to customize Larbin 发现这么段说明:
The first thing you can define is the module you want to use for ouput. This defines what you want to do with the pages larbin gets. Here are the different options :
DEFAULT_OUTPUT : This module mainly does nothing, except statistics.
SIMPLE_SAVE : This module saves pages on disk. It stores 2000 files per directory (with an index).
MIRROR_SAVE : This module saves pages on disk with the hierarchy of the site they come from. It uses one directory per site.
STATS_OUTPUT : This modules makes some stats on the pages. In order to see the results, see http://localhost:8081/output.html.
靠,默认什么都没输出,于是认真的看了官方网站上仅有的两个文档,修改了options.h再编译,终于有结果了。
我的option中改了:
SIMPLE_SAVE 简单输出一个目录两千个文件,包含索引。
CGILEVEL=0 处理服务器端程序,也就是但url中包含? & = 之类的querString时也处理。
NO_DUP
其余可根据各自需要修改,详见: How to customize Larbin 一文。