AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VB编程

制作自己的网络搜索软件

51自学网 http://www.wanshiok.com

   什么叫对代码的优化处理呢?因为返回的结果中包含许多其他没有什么用处的修饰,比如表格、banner、menta等等信息,而这些信息并不是我们需要的,去掉这些信息,只保留对我们来说有用的结果,这就是优化。那么怎样优化呢?分析HTML语法您就会看到,许多信息都是包含在一些关键词之间。举个例子:对于插入的图片来说,都是用”<img src=” 来开头,用往后遇到的第一个”>”来结尾,这样一来就清楚了,只要把代码中所有的满足以上条件的语句删掉,这样代码中就不会出现直接图片信息,我们参考以下的一段代码:

Public Function picFilter(downCode)'定义一个过滤图片信息的过程

Dim pStart As Long, pStop As Long

Dim pString1 As String, pString2 As String

pString1 = "<img"

pString2 = ">" '分别将两个关键词定义

pStart = InStr(downCode, pString1)'找到第一个图片信息的起始位置

If pStart <> 0 Then '如果代码中有图片信息的话

pStop = InStr(pStart, downCode, pString2) + 1 '从上面找的起始部位开始找到第一个用于结束图片信息的”>”

Do While pStart <> 0 '只要仍旧有图片信息

Mid(downCode, pStart, pStop - pStart) = Space(pStop - pStart) '将代码中的图片信息用空格代替,实现删除效果

pStart = InStr(pStop, downCode, pString1)'重复上面的过程,删除其他的图片信息

If pStart = 0 Then Exit Do '没有图片信息后,退出循环

pStop = InStr(pStart, downCode, pString2, 1) + 1

Loop

picFilter=downCode '将处理过后的代码返回过程函数

End Function

接下来只要使用

lastResult=picFilter lastResult

就实现了对临时变量中搜索结果代码的图片信息去除工作,以此类推,很容易去掉诸如”<font”、”<b”等信息。

   上面所说的是一种方法,但我们知道HTML语法中关键词很多,如果都用以上的条件过滤的话,会使程序的效率大大降低,运行速度也会减慢很多。有没有更好的方法?有,如果是有心人的话,您就会发现不同的搜索引擎返回的结果有其独特的编排方式,我们仍旧以雅虎为例,你只要察看其返回的结果源代码就会发现:每一条信息的链接和主题部分排列都是以“<LI>”开始,以“<A>”结束,而在“<A>” 和接下来的第一个“<”之间的部分是该主题的简单描述,这样我们可以用下面的代码来将雅虎搜索结果代码中的有用信息提炼起来:

Public Function yahooFilter(downCode)

Dim sString1 As String, sString2 As String, sString3 As String

Dim sStart As Long, sStop As Long

Dim string1 As String, string2 As String, lastString as string

sString1 = "<LI>"

sString2 = "</A>"

sString3 = "<"

sStart = InStr(downCode, sString1)'取得第一条主题信息的起始位置

Do While sStart <> 0

sStop = InStr(sStart, downCode, sString2)

string1 = Mid(downCode, sStart + 4, sStop - sStart) '将第一条主题信息存放在string1变量中

sStart = InStr(sStop, downCode, sString1) '从第一条主题信息的结束部位开始查找该主题的简单描述

sStart = sStop + 4

sStop = InStr(sStart, downCode, sString3) '取得该主题描述部分的结束位置

If sStop = sStart Then '判断只有主题而没有描述的信息

string2 = ""

ElseIf sStop <> sStart Then

string2 = Mid(downCode, sStart, sStop - sStart - 1) '取出主题描述部分

End If

lastString = lastString + "<p>" + string1 + string2 '将提炼的结果存放在临时变量中

sStart = InStr(sStop, downCode, sString1)'重新定位下一条信息的起始位置

Loop'循环

yahooFilter = lastString'

End Function


经过了上面复杂的提炼,然后将提炼的结果写到一个网页文件中,然后调用浏览器显示,会出现整整齐齐的结果,象图二一样:

   返回头来我们看一下现在比较流行的搜索软件,比如 SearchX98、Crazysearch、Inforian Quest 99,无论他们说明写的再好,也跳不出上面所说的原理,但他们各自有自己的一些独特之处,比如SearchX98 能够连续搜索多个引擎,其实就是发出一条搜索指令后,程序本身连续在各个搜索引擎发出搜索指令,将返回的结果经过简单的处理生成一个页面,其他的内容搜索更是最简单的直接发出搜索指令而已。而对于 Crazysearch,你只要打开注册表,就会发现其中文搜索只能搜索中文雅虎,英文只能搜索Excite,但号称注册版本能够搜索1000条记录,其实您只要分析一下雅虎的搜索代码就会发现,其中有一个关键词是 “n=”,代表一次搜索返回的结果数目;另外一个是“b=”,代表从第几条记录开始显示,就这两个关键词起到了这么重大的作用,但Crazysearch的独特之处在于返回的搜索结果以表格方式排列,直观醒目。最后要推荐的是Inforian Quest 99,尽管其原理也超脱不了以上的范围(您只要打开其目录下的site子目录中的文件就清楚了),但我还是极力推荐,因为无论是从站点的数量,搜索范围的广泛,搜索的速度,结果的详细,没有能过超过Inforian Quset 99的,而且要差很多。当然基于对国产软件的支持,我们还是可以对上面的两个软件寄予厚望。同是由于本人水平有限,难免有疏漏之处,敬请大家指正。

 
 

上一篇:自动更新工作站的应用程序  下一篇:怎样用VB得知系统当前是否处于internet链结状态