我要投稿
  • 您当前的位置:57365.com -> 技术教程 -> 服务器网络 -> 服务器教程 -> Web服务器教程 -> 教程内容
  • [ 收藏本页教程 ]
  • 网络蜘蛛(网络机器人)的秘密Web服务器教程

    教程作者:佚名    教程来源:不详   教程栏目:Web服务器教程    收藏本页
                  摘要:网络蜘蛛(网络机器人)的秘密
    [size=24:85a2859c23][color=red:85a2859c23][b:85a2859c23]网络蜘蛛(网络机器人)的秘密[/b:85a2859c23][/color:85a2859c23][/size:85a2859c23]

      经常去雅虎、搜狐等网站搜索信息的读者一定有这样的疑问:[b:85a2859c23]如此庞大的网页信息,到底是如何被这些网站所收集到的呢?难道都是人工登记并整理的吗?[/b:85a2859c23]当然不是。这些搜索引擎能够快速地找到如此之多的信息,和网络蜘蛛的应用是分不开的。 

      网络蜘蛛可以算得上是为Internet而开发的最有用处的工具之一。时至今日,要想从以千万计的各不相同 的站点中获取信息,舍网络蜘蛛之外,焉有他哉?
    
      一个典型的网络蜘蛛(例如雅虎)工作的方式,是查看一个页面,并从中找到相关信息, 然后它再 从该页面的所有链接中出发,继续寻找相关的信息。以此类推,直至穷尽。很快地,就可以在数据库中获得成 千上万的页面和信息。这样的工作方式就如同一张向外发散的蜘蛛网,这正是“网络蜘蛛”这个名称的由来。 
    
      接下来让我们看看如何建立一个网络蜘蛛。在此之前,我们先要了解几个概念。
     
    [b:85a2859c23]一、基本原理[/b:85a2859c23]
    
      我们可以用网络蜘蛛搜寻很多东西。事实上,现在有一些特别用途的商用网络蜘蛛,这些软件为它们的开 发者赚取了大把的钞票,比如Altavista科技的一份许可证,就价值30万美元。以下是一个网络蜘蛛的基础原理:
    
      * [b:85a2859c23]从各个消息来源收集信息[/b:85a2859c23]
    
      从技术角度讲,一个网络蜘蛛应该可以不受限制地从任意来源获取信息。来源多多益善。
    
      * [b:85a2859c23]准确度[/b:85a2859c23]
    
      不管是谁,遇见这样的事情肯定都会崩溃——搜索引擎向你返回了一百万个结果,可是,只有最后两个是 你需要的(这还算好的,如果是中间的两个呢?)。所以好的网络蜘蛛对其返回的结果应该有足够的准确度, 而且在有些情况下,还要有特定的功能,也就是说,只返回特定类型的信息——比如www.enfused.com的专为 搜索游戏设计的网络蜘蛛,就只返回与游戏相关的东西。
    
      *[b:85a2859c23] 相对更新[/b:85a2859c23]
    
      这依赖于你所使用的技术(下面我们会专门提到),网络蜘蛛应该找回更新后的信息,或者至少是比较新 的信息。如果网络蜘蛛总是找回一些几年前的陈芝麻烂谷子,那你一定会比系统先一步崩溃。
    
      * [b:85a2859c23]相对快速[/b:85a2859c23]
    
      这就不用多说了,如果没有足够的速度,那你的网络蜘蛛再怎么准确,也是白搭。 


    [b:85a2859c23]二、基本技术[/b:85a2859c23]
    
      有好几种方法可以构建网络蜘蛛。第一种,称之为常规网络蜘蛛,只是简单地进行页面寻找,搜索并获得 你想要的东西。例如,用一个短语作为关键词进行搜索。第二种,特殊网络蜘蛛,只寻找页面的特定部分。这 种网络蜘蛛在某些特定场合很有用(比如,你只想获得某一个站点内的新闻标题)。 
    
      常规网络蜘蛛是两者中相对简单的一种。首先,你不需要预先知道目标页面的情况。只需要在该页面中, 以及在与其链接的页面中,寻找你要的关键词就可以了。你还可以在功能中设定,忽略掉那些在同一站点下的 链接,从而保证每一个结果都来源于不同的站点。
    
      与之相对应,一个特定的网络蜘蛛通常要求你预先知道一些目标页面的情况,例如表格规划等。举个例子 ,如果你搜寻的是一个页面中的新闻标题,你应该先知道限定此标题的HTML标记。如此你才可以直接搜索页面 中正确的部分。在这种情况下,是否具备搜索该页面的所有链接的功能显得不是特别重要,因为你的网络蜘蛛 很可能在别的页面中无法找到标记,不能进行工作。
    
      运行网络蜘蛛的时间也有所不同:你可以预先运行,也可以实时运行。预先运行意味着当你的网络蜘蛛运 行时,所有搜集到的信息都存贮在一个数据库中,以备以后使用。很明显,如此你将不会获得最新的数据,但 是如果你经常运行网络蜘蛛,这个问题也不会有什么大碍。
    
      实时运行意味着你每次运行网络蜘蛛所获得的信息都不会被保存下来,你只能现找现用。例如,如果你在 站点设置了搜索功能,在实时状态下使用网络蜘蛛,则无论何时,只要有用户输入一个关键词并点下“发送” 按钮,你的网络蜘蛛就将运行,而不是仅仅访问数据库。尽管这可以保证你的数据总是最新的,但是却不是大 多数站点的首选,因为网络蜘蛛本身运行和返回数据都需要时间——而时间就是金钱呀!当然,所查找的资料 具有高度时间敏感性的时候例外。


    [b:85a2859c23]三、构建网络蜘蛛[/b:85a2859c23]
    
      那么如何构建网络蜘蛛呢?答案是:Internet transfer control (ITC)。这个由微软提供的控件,将使你能够通过ASP程序访问Internet资源。你可以用ITC搜寻Web页面,访问FTP服务器,甚 至可以发送邮件标题。在本文里,我们将着重讨论搜寻Web页面的功能。
    
      有几个缺陷必须先说明一下。第一,ASP无权访问Windows的注册表,这就使某些ITC正常存储的常量和数 值不可用。通常你可以通过设置ITC为“不使用默认值”来解决这个问题,这就需要你在运行过程中指明每一 次的值。
    
      另一个更严重的问题是关于许可证书的。由于ASP不具备调用License Manager(一项Windows中的功 能,可以保证组件和控件的合法使用)的功能,那么当License Manager检查当前组件的密钥密码,并将 其与Windows注册表进行比较后,如果发现它们不同,该组件将不会工作。因此,当你想把ITC配置到另一台没 有所需密钥的计算机上时,将导致ITC崩溃。解决的办法之一是将ITC捆绑到另一个VB组件中,由VB组件复制 ITC的路径和工具,从而进行配置。这项工作很麻烦,但不幸的是,它是必不可少的。
    
      下面是一些例子:
    
      你可以用下面的编码建立ITC:

    set Inet1 = CreateObject("InetCtls.Inet")
    Inet1.protocol = 4 'HTTP
    Inet1.accesstype = 1 'Direct connection to internet
    Inet1.requesttimeout = 60'in seconds
    Inet1.URL = strURL
    trHTML = Inet1.OpenURL'grab HTML page
    
      现在strHTML保存着strURL指向的整个页面的HTML内容。要建立一个常规网络蜘蛛,你现在只需要调用 instr() 功能来看看你寻找的串是否在当前位置即可。你也可以按照href标记寻找,解析当前的 URL,然后把它设置到Internet 控件的属性中去,接着再继续打开另一个页面。用来查看所有链接的最 好方法是使用递归。
    
      要注意的是,尽管这种方法很易于实行,却不是非常准确和强大。今天的许多搜索引擎都可以进行额外的 逻辑检查,例如计算一个页面中某一短语重复的次数,相关字词的近似程度等,有些甚至可以用来判断所搜寻 的语段与上下文的关系。这些功能将留待我们的读者们自己去摸索。
    
     
    四、[b:85a2859c23]特定网络蜘蛛[/b:85a2859c23]
    
      相对的,一个特定网络蜘蛛要复杂一些。如我们早先提到的,一个特定网络蜘蛛会搜寻一个页面的特定部 分,因而要求预先知道该部分相关的情况。让我们先看看下面的HTML:
    
       <HTML><HEAD><TITLE>My News Page</TITLE><META Name=&quo t;keywords" Content="News, headlines"><META Name="descr iption" Content="The current news headlines."></HEAD> ;<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF3300 "VLINK="#CC0000" ALINK="#0000FF"><p><h3>Headlines&l t;/h3></p><!--put headlines here--><a href="/html/news8094.asp .html">Stocks prices fall</a><a href="/html/news8095.asp.html">Ne w movies today</a><a href="/html/news8096.asp.html">Bush and&nb sp;Gore to debate tonight</a><a href="/html/news8097.asp.html"> Fall TV lineup</a><!--end headlines--></BODY></HTML>

    
      在这个页面内,我们只关心位于“put headlines here”和 “end headlines”这 两个标记之间的东西。你可以构建一个只返回该区域查找结果的功能设置:

    Function GetText(strText, strStartTag, strEndTag)
    dim intStart
    intStart = instr(1, strText, strStartTag, vbtextcompare)
    if intStart then
    intStart = intStart + len(strStartTag)
    intEnd 
    我要投稿   -   广告合作   -   关于本站   -   友情连接   -   网站地图   -   联系我们   -   版权声明   -   设为首页   -   加入收藏   -   网站留言
    Copyright © 2009 - 20012 www.www.hxswjs.com All Rights Reserved.57365.com 版权所有