大家都知道,获得信息是我们上网的很大一个目的,而获得信息对于大多数人来说要通过网上的搜索引擎来搜索自己所需要的信息,而搜索软件通过向搜索站点发出特殊搜索字串命令(各个站点的格式不一样),然后用软件对结果进行处理后显示出来。原理简单,可是效果却是显著的,能够迅速而方便的搜索到各个站点的信息。下面我就通过介绍使用 vb制作自己的搜索软件和剖析现在流行的搜索软件程序来介绍这些内容: 我们都知道vb是最简单方便的编程语言,利用vb编写一个小小的搜索软件用不了多少行语句。第一步当然要安装一个vb5.0或者6.0 的运行环境。启动vb以后,首先创建了一个窗体,然后要对运行环境进行一下设置:具体来说呢,就是添加上必要的控件,一般来说,如果您安装了IE4.0以上的浏览器,windows的 system目录中就会有SHDOCVW.DLL的文件,我们通过点击菜单中“工程”-“部件”,在弹出的对话框中找到有一栏写着”microsoft internet controls”的选项,这个选项其实就是上面提到的SHDOCVW.DLL 文件的描述。利用这个文件我们可以初始化一个浏览器的实例。当您选中这个选项后,会发现工具栏中多了一个形状如同地球的按钮,这就是刚才选中的浏览器控件,我们双击这个图标按钮在窗体上生成一个webbrowser1 的部件,接下来我们就使用这个部件来显示查询的结果。
接下来我们在窗体上放上一个文本框和一个按钮,其实就这几个部件已经可以算是一个最小的搜索程序基本结构了。我们现在来所一说网络搜索的原理:上面已经提到是通过向搜索站点发出特殊搜索字串命令(各个站点的格式不一样),然后用软件对结果进行处理后显示出来,但如何发出搜索字符串、发出怎样的字符串还需要有一定的HTML 知识。我们知道对于网上信息的的发送是通过表单的形式来发送的,也就是说当我们在网上点击某些表单时,通过表单中包含的默认地址中的表单处理程序来接受所有包含在表单中的信息,而这些信息有的是显示的,而另外一些却是隐藏的。您可以试着将一个包含有表单的网页用Frontpage或者Dreamwaver打开,这时你就会发现有很多用浏览器看不到的东西,这些隐藏的标志同样在您发送表单时起着重要的作用。没有这些标志,发出的字符串很可能得不到服务器的应答。我们知道了这些,再返回头来看我们程序所需发出的字符串,举个例子来说:最常用的雅虎中文的搜索代码是 ”http://cn.search.yahoo.com/search/gb?p=***”,其中***代表的是所要搜索的字符串,而剩余的部分是处理字符串的服务器程序的地址,另外一个我们很常用的搜索引擎Yeah,它的搜索代码相对复杂了一些是”http://www2.yeah.net/cgi-bin/query2.exe?query=***&start=0&REXP=AND” ,但基本的东西没有变,它们都是使用了这样一种形式:http://目标URL?参数1名=参数1值&参数2名=参数2值&参数3名=参数3值…
对于http协议,其中包括重要的几种传送数据的方法,其中比较常用的有GET和POST方法,对于使用GET方法进行传送数据的网站来说,使用上面的形式百发百中,都能够通过一条查询语句返回所需要查询的内容网页,但对于使用 POST方法的网站,有可能返回不了查询结果网页,不过从我的经验看,一般来说是能够成功的。
知道了如何向服务器发送查询语句,下面我们就从程序的角度来写:假若窗体上有一个文本框Text1、一个标签Label1、一个浏览器Webbrowser1、一个按钮Command11,其中文本框用于输入关键词,浏览器用于显示查询结果网页,按钮用于发出请求语句,那么点击Command1的程序语句可以这样写:
Private Sub Command1_Click()
Dim url As String
On Error Resume Next '出错后继续
If Text1.Text = "" Then MsgBox "请先输入关键字": Exit Sub '防止不输入关键词
url = "http://search.chinese.yahoo.com/search/gb?p=" +Text1.Text '将关键词放入查询语句中
Webbrowser1.Navigate url'调用浏览器显示查询结果
End Sub
雅虎的查询语句比较简单,而对于比较复杂网站的查询语句一定要注意的是各个关键参数之间一定要用“&”来隔开。虽然你只是学会了这一招,但已经足够利用网上的资源来编写你的第一个程序了,因为网上所有类型的表单都能表示了,无论是查询股票、软件、书籍、图片,都不外乎这种模式。只要你将查询网页调入 Frontpage、Dreamwaver等所见即所得的网页编辑软件中,便会毫无遮拦的展现在你的面前,利用这些链接,再加上一个好的界面,当然可以制作自己的搜索工具软件了,不过要注意的是,有些表单的传送路径的是相对路径,这时要加上网站的地址链接。 可能有人要说,这么简单,谁不知道,不是为了赚稿费吧?错。刚才的方法比起直接访问搜索站点的确能节省不少上网的时间,但并没有将程序的优势全部发挥出来,我们现在继续讲另外一种检索网页的方法:首先介绍一个控件Microsoft Internet Transfer(这个控件在安装vb或者某些程序的时候会自动安装),这个控件允许建立与其他计算机的链接,并传送文件。它使两个Internet规则 HTTP和FTP的使用变得容易。当正常访问一个网页时,Internent Transfer用GET命令访问网络浏览器的一个文件。例如,如果打开了URL http://www.cpcw.com/index.htm,浏览器将建立与地址在www.cpcw.com的机器的链接,并传送命令GET/index.htm。HTML 将通过链接以普通文本的方式返回,因为返回的内容只是所要的网页的源文件,节省了很多用于传送显示网页中图像的时间,速度要快了许多,但最重要的是我们可以很方便地使用自己的逻辑对凡会的源文件进行正确地分析和格式化,重新整理网页的查询结果。
我们还用刚才的窗体,只是要在菜单中选择“工程“-”部件“,在弹出的对话框中找到一项是:Microsoft Internet Transfer Control,选中后,在工具栏中您就会发现增添了一个显示有地球和计算机的小按钮,双击这个按钮会在窗体上加入一个 Internet Transfer实例Inet1,完成了这些步骤后,窗体应如图一所示。现在准备在实例工程中加入代码。
Internet Transfer控件有一个事件StateChanged。这个事件的目的是当不同的操作发生时通知用户程序。例如:控件在与网络服务器链接时是一种状态,检索HTML是另一种状态。当前的状态用事件过程的State 参数来表示。在示例程序的StateChanged事件中输入如下代码:
Private Sub Inet1_StateChanged(ByVal State As Integer)
Select Case State
Case 12 '表明网络连接检索正常
stemp=Inet1.GetChunk(1024) '使用GetChunk方法从缓冲区中一次提取1024个字节的回应文本,并存放在stemp临时变量中
While stemp<>””'当仍然返回信息时
LastResult=LastResult+stemp'将整个网页的源文件代码放入LastResult变量中
stemp=Inet1.GetChunk(1024)'循环
Wend
Case 11
MsgBox "未返回搜索结果"
End Select
End Sub
尽管StateChanged事件包含了这个示例程序代码的主要部分,我们仍然需要在Command1的Click事件中加入代码,以初始化这个请求。下面就是这段代码:
` Private Sub Command1_Click()
url = "http://search.chinese.yahoo.com/search/gb?p=" +Text1.Text
Inet1.protocol=icHTTP'指明控件协议类型
Inet1.Execute CStr(url),”GET /” '发出请求
While Inet1.StillExecuting
DoEvents
Wend
End Sub
前面已经提到,以这种方法返回的信息包含了搜索的结果网页,同直接搜索的区别就是由于这样返回的就是源代码,暂时存储到一个临时变量中,这样一来,你既可以将返回的信息直接存储到一个文件中,另一种方法,这就是我们下面要提到的对代码的优化处理。
<  
1/2 1 2 下一页 尾页 |