我用webbrowser取到了一个页面所有的超级链接.但是取到的一个页面的超级连接有部分是其他站的,比如我取http://www.hao123.com 这个页面的所有连接取到的还有:hi.baidu.com …我现在想过滤掉其他站的连接 , 只取hao123的所有的连接,包括二级域名.这个问题想了很久,希望智商高的帮我一把.我想每次获取一个连接的时候 PING他的IP,是否和hao123的IP一样,如果一样才取.但是貌似速度非常非常的慢.

解决方案 »

  1.   

    这个应该没有什么好办法,只能是把取到链接逐个检验域是否符合要求了。
    比如你要 http://www.hao123.com   这个页面的所有连接
    那么域就是hao123.com,基本的字符串查找就可以了。
      

  2.   

    楼上说的不错 检查href的域就行了
      

  3.   

    在你的窗体上先建三个控件:WebBrowser1、Button1、Memo1。然后双击Button进入代码编写环境,复制下面的代码代替原来的代码即可实现你的要求。程序中比较没有用到Pos,因为Pos是区分大小写的,这里没必要区分,所以用的是 AnsiContainsText函数。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, OleCtrls, SHDocVw;type
      TForm1 = class(TForm)
        WebBrowser1: TWebBrowser;
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        procedure FormDblClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
    implementation{$R *.dfm}
    uses StrUtils;procedure TForm1.Button1Click(Sender: TObject);
    var i:integer;
    begin
    for i:=0 to webbrowser1.oleobject.document.links.length-1 do
     if AnsiContainsText(webbrowser1.oleobject.document.links.item(i).href,'hao123.com') then
     memo1.Lines.Add(webbrowser1.oleobject.document.links.item(i).href);
    end;procedure TForm1.FormDblClick(Sender: TObject);
    begin
    Webbrowser1.Navigate('http://www.hao123.com');
    end;end.
    如果上面的代码还不够精确,你可以修改成这句:
     if AnsiContainsText(webbrowser1.oleobject.document.links.item(i).href,'www.hao123.com') then
      

  4.   

    我觉得最快的是字符串查找,是否包含 'YourWeb.com'关键字