具有自动查找Web页面上所有链接的网络浏览器

具有自动查找Web页面上所有链接的网络浏览器

1. 概述
WEB的应用已经深入到现在社会的方方面面,作为一个软件开发人员或其他技术人员,都有可能遇见在Internet上查询大量的资料和信息的情况,一般来说用的最多的就是WEB的搜索Engine。当我们使用它查出大量的资料链接后,还有可能遇到更多的链接,但要自己去看他们是否是链接,那确实是一件很麻烦的事情。这篇文章就是来讲,如何用Delphi的MSHTML_TLB.pas来开发一个具有自动查找Web页面上所有链接的简单网络浏览器。我是在IE5的环境下写的这个程序,当然它可以向下兼容,如IE4。
2.关于MSHTML_TLB.pas
MSHTML_TLB.pas是Deliphi里面自带的一个类。它的含义是Microsoft HTML对象库。它不能够包含在所有的工程或程序中,原因是它实在是太大了,整个文件的代码共有241,899l行,那么长。大小约有12M。下面我们来看看它是如何加入到程序中的。
1. 首先,我们打开Delphi,建立一个新的application。我把form1保存为MainFrm.pas,把application保存为FindLinks.dpr.
2. 要想实现IE 的功能我们就必须要使用Microsoft HTML对象库(MSHTML type library.)如何实现呢?如图1, Project->Import Type Library:

然后你会看到关于"Microsoft HTML Object Library (Version 4.0)"的列表,如图2。
接下来可能会遇到一些问题。比如,在列表里面没有出现"Microsoft HTML Object Library (Version 4.0)"。这是为什么呢?那是IE的问题,由于IE版本的不同(我用的是IE5)。我建议最好是先查询你的计算机里面有没有mshtml.tlb这个文件。
在9x里面它是存在与C:/WINDOWS/SYSTEM目录里面,在2000里面它在/WINNT/system32目录里面。如果找到了这个文件,就可以用图2的click on the "Add..." button,然后选择mshtml.tlb,就可以了,如果没有找到它,那说明你没有安装IE或你的IE版本太低,请升级IE。
最后,当我们选择了倒入的库后,会等待一段时间,因为它实在是太长了,不过请千万不要因为是死机了。它会给自动查找提供很多帮助。
3. 工程实现。
界面设计如下图:

 
使用以下组件:
控件 命名 TEXT
TLabel lblURL 资料网址
TEdit edtURL http://www.huihu.com
TButton btnFindLinks 查询连接
TListBox lstbxLinks null

4. 程序设计
1. 在Form1的interface部分,在uses后面加入,OleCtrls, SHDocVw, and OleServer.这些所应用的类,都是基于我们所要创建的TinternetExplorer的,它是IE的ActiveX的对象。但是这里还有其它的方式(TinternetExplorer)进行,我们采用TwebBrowser 控制在我们的form1。
2. 我们在private里面加入如下代码:
FInternetExplorer: TInternetExplorer;
procedure WebBrowserDocumentComplete(Sender: TObject; var pDisp: OleVariant;
var URL: OleVariant);     
最后用Ctrl-Shift-C完成类的声明。
3. 在impelmentation后面加入如下声明:
uses MSHTML_TLB, ComObj;
要使用的类。
4. 在form1的OnCreate事件中加入如下:
     FInternetExplorer := TInternetExplorer.Create(Self);
  FInternetExplorer.OnDocumentComplete := WebBrowserDocumentComplete;
5. 最后在form1的TForm1.WebBrowserDocumentComplete里面加入如下代码:
1. procedure TForm1.WebBrowserDocumentComplete(Sender: TObject;
2.     var pDisp: OleVariant; var URL: OleVariant);
3. var
4.   Doc: IHTMLDocument2;
5.   ElementCollection: IHTMLElementCollection;
6.   HtmlElement: IHTMLElement;
7.   I: Integer;
8.   AnchorString: string;
9. begin
10.   lstbxLinks.Clear;
11.   // 在处理网页的时候发现它没有完全下载,将不会进行处理连接
12.    Doc := FInternetExplorer.Document as IHTMLDocument2;
13.   if Doc = nil then
14.     raise Exception.Create('Couldn''t convert the ' +
15.       'FInternetExplorer.Document to an IHTMLDocument2');
16.   // 夺取web上的所有元素。
17.   ElementCollection := Doc.all;
18.   for I := 0 to ElementCollection.length - 1 do
19.   begin
20.     file://得到当前的元素
21.     HtmlElement := ElementCollection.item(I, '') as IHTMLElement;
22.     // 查找网页原代码中的LINK标记。
23.     // 发现其它的html标记 (例如: TABLE, FONT, etc.)
24.     if HTMLElement.tagName = 'A' then
25.     begin
26.       // 在详细的link里面抓取innerText,innertext就是标记中<href=后面的东西>例如:

27.       // 我们在web里面看见"西南民族学院"
28.       // <a href="http://www.swun.edu.cn"><b>西南民族学院</b></a>.
29.           AnchorString := HtmlElement.innerText;
30.       if AnchorString = '' then
31.         AnchorString := '(Empty Name)';
32.       AnchorString := AnchorString + ' -  ' +
33.         (HtmlElement as IHTMLAnchorElement).href;
34.       lstbxLinks.Items.Add(AnchorString);
35.     end;
36.   end;
37. end;

   最后我们在button(btnFindLinks)加入Onclick 事件:
1. // 在被浏览的web里面进行查询连接。
2.   FInternetExplorer.Navigate(edtURL.Text, EmptyParam, EmptyParam,
    EmptyParam, EmptyParam);
从以上的程序里面我们可以看出它的原理了,实际上是很简单的,看过html原代码的人都知道,使网页产生连接的代码就是:<a href="http://www.swun.edu.cn"><b>西南民族学院</b></a>.
我程序的原理就是通过截取href后面的字符串,并在"""号后面截止。
然后把它保存为另外的字符串。然后通过TwebBrowser显示出来。
最后让我们来编译这个程序,的却,编译它很费时间,因为编译多达241,899l行的MSHTML_TLB.pas,是一件很麻烦的事情。其中还包括多达20多个的warning错误,但请放心这是MSHTML_TLB.pas的问题,与其它程序无关。这样一个小型的查找Web页面上所有链接的简单网络浏览器就出现在我们面前。本程序在IE5.0和Delphi6下编译通过。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
[软件功能]: 本软件用于从搜索引擎或者具体网页上提取链接,主要用途是搜索留言本、论坛、blog等地址 通过您设定的关键词 软件自动在搜索引擎结果里提取符合条件的连接 本软件把超链接分为两部分看待:连接和连接名称 通过对这两部分的设定来提取符合要求的连接 可以设定只提取含有某“特征词”的网址 也可以设定过滤含有某“特征词”的网址(针对链接) 可以设定只提取链接名称含有某“特征词”的网址 也可以设定过滤链接名称含有某“特征词”的网址(针对链接名称) 提取搜索结果是一门技术,需要一定的电脑和网络基础,本软件是为懂电脑和网络的人设计的 本软件是免费软件,不对外提供服务(本人的全系列客户除外) [参数说明]: 本软使用的关键在于正确设置各项参数,参数设置对了,链接也就提出来了 关键词或网址:如果从搜索引擎里提取 就填写关键词 比如 签写留言(提取留言本) 、Powered by Discuz(提取discuz类型的论坛) 如果是从某页面提取 就填写完整的网址 比如 http://club.sohu.com/map/club_map.htm 链接必含词汇: 就是规定提出来的链接必须含有什么词汇 比如提取留言本 就可以设定 wbook.asp、gb_sign.asp、upfile.asp、feedback.asp 这些常用的留言本文件名称 也可以留空,表示所有的网址都要 链接排除词汇:如果你不希望提取的网址含有某个词汇 就写上 这个一般不要动,不要修改默认的,更不能留空 链连名称必含: 就是提取连接时,链接名称里面必须含有的词汇 这个一般不要动,留空即可 链连名称排除: 就是提取连接时,链接名称里面不能含有的词汇 这个一般不要动,不要修改默认的,更不能留空 间隔或者限时:因为google禁止连续不停的快速搜索,所以本软件对百度和google采用不同的方式提取 对百度是连续性的 对google是固定间隔时间的不断提取 限时: 处理某一个页面允许的最长时间 超过限时就刷新重试 (针对百度) 间隔: 隔多久提取下一页(针对google,默认15秒,尽量不要修改) 过滤相似: 这个参数对应着搜索引擎的两种搜索模式,一般都要选上它,不熟悉搜索引擎的不要改 设置好各项参数后点击<提取>按钮即可,软件开始提取, 软件左下角会显示进度,提取完了会显示提取完毕 举例说明: 一、如果想从搜索引擎里提取某些网址 A.比如想提取一些留言本地址 首先 选择要用的搜索引擎(百度或者google) 然后输入关键字“签写留言” --如要教育类的留言本,就输“签写留言 教育” --如不要带验证码的就输“签写留言 教育 -验证码” 关键词选择学问很大,需仔细琢磨 其次选择链接必含词汇 --词汇那儿可以不填,这样可以提取出所有类型的留言本 --如果需要某一类型的留言本,就填上该类型的留言本地址都有的词汇 比如 "write.asp"、"upfile.asp"、"leaveword.asp"、"add.asp"等等 其它参数可以不动 最后点<提取>按钮。软件就开始搜索,并不断把搜索到的相关网址添加到左边列 同时列表下方会显示提取了多少页,直到全部页面提取完毕。 B.比如想提取一些动网论坛地址 请先选择要用的搜索引擎(百度和google),然后输入关键字“Powered By Dvbbs”。 因为大多数论坛地址都含有“bbs”,所以你可以设定"bbs"为必含词汇,也可以不输入 其它参数可以不动。 直接点<提取>按钮。软件就开始搜索,并不断把搜索到的相关网址添加到左边列表里 同时列表下方会显示提取了多少页,直到全部页面提取完毕。 二、如果想从某具体网页上提取某些网址 请先输入该网页完整的具体网址 然后输入要提取的网址里面必含词汇,也可以输入排除词汇 然后点提取即可把你想要的网址一次性提出来。 比如想要搜狐论坛列表 http://club.sohu.com/map/club_map.htm 里的所有论坛栏目地址 首先输入网址 http://club.sohu.com/map/club_map.htm 我们可以发现该页面上论坛栏目地址都含有list这个词,所以把“list”作为必含词汇 然后点<提取>按钮,就可以把所有的搜狐论坛栏目地址都提出来了 注意事项: a.如果想提取全部网址,只需把必含词汇设为“http”或者留空 b.用不同特征词从搜索引擎提取某一类网址时,链接排除词汇的设定可以避免重复提取 c.一般情况下不要改动排除词汇的设定,默认设置不影响正常提取

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值