`
woshizn
  • 浏览: 210220 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

支持web信息分类的高性能蜘蛛程序 爬虫程序 spider

阅读更多
转自:小型微型计算机系统 文/高克宁 柴桥子 张斌 马安香

   蜘蛛程序研究现状

          对任何需要抽取大规模数据信息的网络蜘蛛,都应考虑如下几个方面的问题

           1.灵活性:任何运行于复杂环境的网络蜘蛛,都需要对平台软硬件资源,网络性能等具有很好的自适应能力,以及对于不同性能需求有相应的调节能力。

          2.健壮性:蜘蛛程序需要很强的容错能力,主要包括:处理不规范的HTML代码以及各类异常,应对服务器端或客服端的异常行为,选择合适的传输协议等,以求将损失减到最低,并具有错误恢复机制

          3.可维护和可配置性:系统需要有良好的人机接口,能够监控系统运行状态与进程,统计各个节点下载页面数量,增删未被处理的URL,终止系统运行等。

           目前,网络蜘蛛实现策略可以有多种,并一直被人们不断的改进和扩充,下面是几种常用的实现策略:

            1.广度优先的蜘蛛程序

            这类蜘蛛一般从一个初始web页面集合出发,进行页面发现和下载广度优先是指首先沿着初始web页面的到处链接进行爬行。在实际应用中,一般都会对蜘蛛程序进行各种改进,增加约束,例如限制在同一站点内页面的下载数量,下载特定主题相关的页面等。

            2.Repititive蜘蛛程序

             为了保持所抓取web页面和索引的有效性,系统会周期性的调用蜘蛛程序来重新采集信息页面。在这类蜘蛛通常采用各种启发式算法,以提高更新的效率。例如,对于系统认为重要的页面,站点等,更加频繁的进行爬行。

            3.定题爬行蜘蛛程序

             现在很多定题搜索引擎采用一定的启发式算法,针对特定领域主题的web信息进行蜘蛛爬行,例如针对新闻,视频,购物,mp3,图片,学术论文等。除采用启发式算法,还有基于超链接结构分析和机器学习的方法设计定题爬行蜘蛛

             4.深层次爬行蜘蛛程序

             在Internet上,除了大量以web页面组织的信息外,数据库,文件系统中的信息量也是可观的,如何从这些数据源中抽取和索引信息,一提高检索系统的信息覆盖面以及查全率已近成为蜘蛛程序的另外一个研究方向

              此外,还有根据概率论进行可用web页的数量估算,用于估评互联网web规模的抽样蜘蛛;采用爬行深度,页面导入链接量分析等方法,限制蜘蛛下载不相关的web页的选择性爬行蜘蛛等。

支持web信息分类的蜘蛛程序的研究思路

              在www上,web网页与普通文本最大的不同在于web网页内具有超链接结构,网页与网页之间是通过超链接相互链接的,这些超链接表示了网站设计者从一个网页到另一个网页的认同选择在Internet上,一个网页几乎是不存在的。网页间的链接关系蕴含着大量信息,既表明网站设计者对网页关系的理解,又是浏览者选择浏览页面的重要依据。

             从对网站结构的分析中,我们发现,为了方便用户浏览信息,网站通常设有自己的分类体系。网站结构按该体系进行信息的分类组织;在显要位置给出各类别信息入口,不同类别的信息处于网站结构中不同位置,同类信息出现在相近的位置,信息发布时根据其类别选择位置。同时,网站结构的组织,总是从网站首页开始,通过索引页面,链接到最终信息页面。

             网站结构体现了信息的分类组织,站点中web页面根据其功能可以分为两类:信息页面和索引页面。前者主要用于表现信息内容的页面,主要内容为陈诉信息的普通文本,后者主要用于信息浏览的导航和组织,其内容为链接到其他页面的超链接,索引页面出发的链接正好构成了网站的分类信息组织体系,而信息页面出发的超链接则干扰了这种组织体系,所以需要进行页面类型判断处理,准确的判断页面是信息页面还是索引页面,并滤除信息页面出发的超链,能使网站结构更清晰。反之,吧索引页面当作信息页面为忽略其始发的超链,会导致获取网站信息不全,把信息页面当作索引页面而保留始发的超链,则是网站结构图复杂化,难于进行后续的分析。

              要获取web信息及基于网站结构的分类体系,需要蜘蛛程序在遍历网站下载页面时,记录个页面之间的链接关系,并对每个页面都记录所有指向自身的超链,在页面记录中,设置记录所有指向该页的超链的记录。处理新页面时,首先解析出内容和超链,并将内容存入页面对应记录;对于信息页面,则终止,对于索引页面,则将解析出的超链接介入任务队列,并更新所有超链指向页面的记录,在记录链入页面的字段中加入本页URL。

高性能蜘蛛程序T-spider的设计与实现

             在传统的信息获取技术中,通常采用crawler,spider,robot等实现,以获取数据内容为目标,并不关心页面间的拓扑关系。我们设计的T- spider,在获取页面信息的同时,自动记录页面间链接关系,通过页面间的链接关系,形成网站拓扑结构图。T-spider 以网站站点为基本单位,以传统的信息获取方式为基础,建立了基于分类语义的信息抽取机制,在抽取网页信息的同时,记录web页面间的链接关系,获取网站的拓扑结构信息。同时T-spider采用了分布式多粒度任务调度算法进行高效的任务分割,支持断点续传并实现了计算节点的在线插播,使T-spider具有高性能,高可靠性和很强的可伸缩性

              体系结构

             支持web信息分类的蜘蛛系统,分为任务执行端(客户端),任务调度端(服务器端)以及数据服务端三部分,其体系结构见图1需要执行的T-spider,则采用分布式设计,运用了java多线程,JRMI,JDBC等技术

              每一个T-spider任务执行端关联一个站点(由服务器端分配),并维护一个URL队列,队列中的每个URL可以在四种状态URCE间迁移(U=为处理,R=处理中,C=已处理,E=出错)T-spider采用广度优先,抢先式多线程的方法从限定站点下载web页,即一个线程下载一个基于URL链接的页面,并进行web页面解析,得到站内URL和发现新站点URL,标记页面之间的链接关系,同时启动新的线程来处理新的URL链接,另外,我们将URL队列持久化到数据库,因此在T-spider任务执行端以外down掉后,能够断点续传。

              T-spider的任务调度端主要完成以下工作

              1.为各个T-spider执行端分配web站点的URL

              2.接受客户端发送来的站点URL,维护站点URL队列及其状态URCE

              3.记录网络蜘蛛系统日志,便于系统性能,运行状态等的控制

              T-spider客户端线程间的协调通信采用java的线程同步技术synchronized,各个T-spider客户端间的同步采用java RMI 技术并由T-spider服务端调控

               在数据服务端中队URL,进行缓存,提高了系统处理速度T-spider的任务执行和任务调度端都需要维持一个URL队列:任务执行端的URL队列中储存了站内URL;任务调度端则是站点的URL。在这些URL队列上有大量的操作,包括URL查找,URL插入,URL状态更新等。如果spider以300 页/秒的速度下载web页面,平均将会产生2000多个URL,因此简单的采用内存数据结构存储这些URL队列有一定问题,系统并没有足够的内存空间;而采用直接持久化到数据库,则需要大量的数据库连接,查询等操作,系统效率会明显下降,如果采用URL压缩的办法,尽管在一定程度上可以平衡空间和时间的矛盾,但仍然不适合用于大规模数据采集的spider

               我们设计的数据结构支持灵活的URL缓存实现,对于URL的检索提供了高效解决方案,任务执行端和调度端均可以通过该缓冲器进行URL检索,该缓存采用了 judy-Array API综合了jugyL-Array和N judySL-Array。缓存中URL的更新策略是依照URL被访问的次数决定换出对象:在hash表中储存的数据以压缩的URL为key,该URL被访问的次数为value,当缓存满时,将value最小的<key,value>清除,其中hash中的URL可以压缩形式查找,不需要解码.

              T-spider的数据库主要存储一下信息:站内URL队列数据(包括URL,站点域名,状态信息,访问次数);web页面数据(包括页面URL,页面标题,导入链接,摘要,正文);站点URL队列数据(包括URL,站点名称,状态信息,链接数量)。

T-spider的实现算法

T-spider任务执行端算法

               T-spider任务执行端的主要功能是从限定的站点下载web页,并进行HTML解析,得到站内URL和发现新站点URL,标题保存页面信息和页面间连接关系。我们采用java设计实现的T-spider任务执行端可部署到大多数计算平台上,包括:windows,solaris,Linux,Unix 等,且这些计算节点支持动态在线插拔,即在蜘蛛程序运行过程中可增加或减少任务执行端个数而不影响系统正常运转:不需要系统中断挂起或重新启动等。

              下面是T-spider实现过程中的主要算法

              算法1 页面种类辨识算法

              T-spider除了下载web页面外,还需标示页面间连接关系,提取站点结构图。网站结构图是以页面URL为节点,页面间相互链接为边的有向图。网站信息页面之间的交错链接实际上造成了网站结构的混乱,应该剪掉,即使信息页面没有到处链接。准确的判断页面是最终信息页面还是导航作用的索引页面,忽略最终信息页面出发的超链,能大大地简化网站结构图。

             我们主要根据页面url形式以及页面内容的特征,判断页面是否正文页面,页面种类辨识算法描述如下:

              step1 初始化:url有效性分析与阔值L的设定

               step2 如果页面对于URL中path部分为空或者没有最终文件名,则可以确定该页面为索引页,返回页面为索引页面的判断;否则转step2

              step3 验证是否出现以下三种情况;页面url的path中的文件名为无意义的顺序号;页面中正文文本的单段最大长度超过阔值L;页面正文文本的前面出现标题。如果出现这三种情况的任一种,则返回该页面为信息为信息页面,否则返回该页面为索引页面。

                算法2 站外链接识别

               由于我们采用的分布式多粒度任务分割算法,在T-spider任务执行端不需要处理新发现的站点URL,而直接将其转发到任务调度端处理,因此需要截断指向站外的链接,保证T-spider总在站内执行,及准确地根据超链URL判断超链是否执行站外。由RFC对URL的定义可知,URL的格式为 [protocot//host:port/path?query],一般情况下,同一网站内所有页面对应URL的host是相同的,所以可以使用 host匹配作为判断超链接是否指向站外的标准,进一步研究发现,很多大型网站中一个分类目录对应一个主机,所以前面的判断标准必须改进。研究host的组成可知,host的格式一般为【站内分类 站点标志串 站点类型各异的串】 站点类型串只有 [ com | edu | gov | net 国家域名] 几种类型,所以我们取站点类型各异串前面的串,即站点标志串作匹配,超链URL的host中是否包含此串,为超链是否站内的判断标准

               算法3 分布式多粒度任务分割算法

               T-spider任务执行端通过RMI与远程任务调度端进行通讯:从调度端接受任务,向调度端报告站外链接。任务执行端将高度自治,即自行同步多线程的资源共享,站内任务调度,解析HTML并提取链接,维护URL队列状态等,这就减轻了远程任务调度端的负载。在T-spider中我们可以对URL以站点为单位进行了分割。本算法很容易进行扩展,可以实现URL更多层次级别的分割,例如站内URL可以继续以栏目作为分类语义进行划分;站点可以按照IP段进行划分

               算法描述如下:

               step1 任务执行端向任务调度器请求任务即站点URL,成功则加入到URL队列,并标记该URL为状态R;失败则等待一定时间间隔再次申请,如果再次失败则该任务执行端运行结束

               step2 下载URL链接到的web页面,下载失败则标记该URL为状态E

               step3 解析web页面,得到文本信息和超链接两部分内容

               step4 解析得到的web内容存入数据库

               step5 解析得到的站内URL,如果未在URL队列中发现,则将<url,url>加入到url队列中,并置状态U,并存储到数据库;若该URL已在队列中则放弃之,同时追加数据库中对应URL的父节点URL

               step6 标记当前URL为状态C

               step7 向任务调度服务器提交新发现的站点URL

               step8 向URL队列申请U状态<url,url>,如果成功则装step2;失败则等待一定时间间隔再次申请,成功则转沙特p,失败则转step1

T-spider任务调度端算法

                 T-spider的任务调度端主要完成以下工作:

                 1. 为各个T-spider执行端分配web站点的URL   

                  2.接受客户端发达来的站点URL,维护站点URL队列及其状态信息URCE

                  3. 记录网络蜘蛛系统日志,便于系统性能,运行状态等的监控

                  我们采用jav RMI进行服务器端的实现,通过JNDI各个任务执行端可以透明的访问调度服务器

                  我们在T-spider的实现中采用了单个调度服务器,由于分布式的体系结构是本系统具有很大的伸缩性,不仅可以部署多个任务执行端,而且可以将调度服务器的URL处理范围以IP段进行划分,运行多个任务调度端,形成更大的Master-Slave主从式群集系统。
分享到:
评论
1 楼 topwong 2010-03-02  

相关推荐

    开源webspider网络蜘蛛webspider-1.0.0.6.tar.gz

    【开源Webspider网络蜘蛛1.0.0.6】是一个功能强大的网络抓取工具,专为高效地抓取互联网信息而设计。该版本(1.0.0.6)体现了其稳定性和可靠性,能够同时处理多个网站的抓取任务,以满足大数据时代的广泛需求。Web...

    开源webspider网络蜘蛛

    开源的Webspider网络蜘蛛是一种高效且稳定的网页抓取工具,设计用于并行抓取多个网站的数据。这个项目采用BS(Browser/Server)架构,即浏览器/服务器模式,这意味着用户可以通过网页界面远程控制和监控爬虫的运行...

    网络蜘蛛webspider开源系统

    同时,它利用淘宝的Tair作为分布式存储解决方案,Tair是一款高性能、高可用的NoSQL数据库,特别适合于分布式环境下的键值对存储,这为Webspider构建分布式爬虫体系提供了坚实的基础。 在数据去重方面,Webspider...

    [其他类别]WebSpider蓝蜘蛛网页抓取 v5.1_webspider.zip

    WebSpider蓝蜘蛛网页抓取工具的核心功能在于网页数据抓取,也被称为网络爬虫或网页蜘蛛。这种工具广泛应用于数据分析、市场研究、搜索引擎优化(SEO)以及自动化报告生成等领域。通过模拟浏览器行为,WebSpider能够...

    用java写的crawler(spider)网络爬虫 源代码

    网络爬虫(Web Crawler),也称为网页蜘蛛、网络机器人等,是一种按照一定的规则自动抓取万维网信息的程序或者脚本。它通过模拟人类用户访问网站的方式,自动地、有序地对网页资源进行抓取,从而达到高效搜集数据的...

    搜索引擎网络蜘蛛

    搜索引擎网络蜘蛛,也被称为网络爬虫或Web抓取器,是互联网上的一种自动化程序,用于遍历和索引网页内容。这些程序对于构建和维护搜索引擎的索引至关重要,因为它们负责发现新的网页、更新现有信息并删除已不存在的...

    一个信息网络爬虫算法

    网络爬虫(Web Crawler),也被称作网络蜘蛛(Web Spider)或网络机器人(Web Robot),是一种自动获取网页内容的程序或脚本。它通过一定的规则,从互联网上抓取需要的信息。网络爬虫是搜索引擎、网站数据分析、网站...

    爬虫技术精髓.pdf

    Web 爬虫(也叫作机器人或蜘蛛)是可以自动浏览与处理 Web 页面的程序。WebSPHINX 由两部分组成:爬虫工作平台和 WebSPHINX 类包。 JSpider: JSpider 是一个完全可配置和定制的爬虫,可以根据需要来配置和定制...

    基于Python的数据信息爬虫技术.pdf

    网络爬虫,也叫网络蜘蛛(WebSpider),是一个模拟浏览器请求站点行为的程序,它可以获取并提取网页上的有用数据。Python,作为一种语法简洁、面向对象的解释性语言,由于其便捷性和易上手性,备受程序员的青睐。基于...

    Ebay-Web-Spider:实施了网络蜘蛛程序,以基于N​​etty应用程序框架收集来自eBay和Terapeak的热门产品的销售信息

    “Ebay-Web-Spider”是一个项目名称,暗示这是一个针对eBay平台的网络爬虫程序,其主要目的是收集有关热门产品销售信息的数据。它特别提到使用了“Netty应用程序框架”,这表明该爬虫是用Java语言开发的,因为Netty...

    Python爬虫入门指南.md

    网络爬虫(Web Crawler),也称为网页蜘蛛(Spider),是一种自动获取网页内容的程序。通过模拟用户浏览网页的行为,爬虫可以抓取网页上的信息,如文本、图片、链接等,并将其存储在本地或数据库中。 网络爬虫的...

    WebCrawler

    网络爬虫是自动化浏览互联网并抓取信息的一种程序,对于数据分析、搜索引擎优化(SEO)以及信息挖掘等领域具有重要意义。 **C语言基础** C语言是一种底层、高效且通用的编程语言,被广泛应用于系统编程、嵌入式...

    spider-1:我的第一个网络蜘蛛用于从百度Encop下载疾病信息

    "spider-1:我的第一个网络蜘蛛用于从百度Encop下载疾病信息" 这个标题提到了两个关键概念:网络蜘蛛(Web Spider)和百度Encop。网络蜘蛛是自动化程序,用于在网络上爬取网页内容,通常用于数据抓取或搜索引擎优化。...

    scrapy 爬虫框架

    12. **性能测试**:提供了评估爬虫性能的方法。 13. **作业管理**:介绍如何暂停和恢复爬虫进程。 #### 六、扩展 Scrapy 除了内置功能外,Scrapy 还允许用户通过自定义中间件和扩展来扩展其功能: 1. **架构概览*...

    用Python写网络爬虫.pdf

    网络爬虫(Web Crawler),又被称为网络蜘蛛(Web Spider)或网络机器人(Web Robot),是自动访问网页并从中抓取信息的程序。Python作为一种高级编程语言,以其简单易学、丰富的库支持等特点,在网络爬虫的开发中...

    Python-新浪微博爬虫ScrapyRedis

    Redis是一款高性能的键值存储系统,通常用作数据库、缓存和消息中间件。在Scrapy爬虫中,Redis可以作为数据队列,负责存储待爬取的URL,实现分布式爬虫时的URL管理和调度。由于Redis支持多种数据结构(如字符串、...

    是一个网页爬虫工具,专门对网页内容进行抓取和解析

    综上所述,Spiderman2作为一款全面升级的网页爬虫工具,其核心优势在于高性能、易用性、优化的架构、分布式爬取能力和成熟的设计。对于需要高效获取网络信息的个人和企业来说,Spiderman2无疑是一个值得考虑的选择。...

    C#博客园多线程蜘蛛模式文章采集器

    在网页爬虫领域,“蜘蛛”通常指的是自动遍历网页并抓取信息的程序。蜘蛛模式就是模拟这种网络爬虫的行为,通过发送HTTP请求获取网页内容,再通过解析HTML或XML文档提取所需数据。在这个采集器中,蜘蛛模式使得程序...

    网络爬虫调研报告.doc

    它们都称作网络爬虫/蜘蛛( Web Crawler),它们实现的原理基本一致:深度遍历网站的资源,将这些资源抓取到本地, 使用的方法都是分析网站每一个有效的URI,并提交Http请求,从而获得相应结果,生成 本地文件及相应...

    利用spring boot + webmagic 开发的java爬虫系统

    WebMagic的四个主要组件包括:Spider(蜘蛛)、PageProcessor(页面处理器)、Scheduler(调度器)和Downloader(下载器)。在Spring Boot环境中,我们可以将这些组件作为Spring Beans定义,利用Spring的依赖注入...

Global site tag (gtag.js) - Google Analytics