IdHTTP + RegExpr
关键词:IdHTTP ,RegExpr,正则表达式,链接
目的:取得Web页面中的链接及链接文字。
操作:
1.使用IdHTTP获取网页的源码。
2.使用RegExpr定义正则表达式,获取网页中的链接及链接文字。
实现方法如下:
//使用正则表达式,匹配网页源码,抽取内容。   
procedure GetLinkFromHtml(Const SourceHtmlTxt,Pattern:String; var aList:TStringList);    
var RegExp : TRegExpr;    
    HasMatch:Boolean;    
begin    
  RegExp := TRegExpr.Create;
  try   
    RegExp.Expression := Pattern;   //范式    
    HasMatch:=RegExp.Exec(SourceHtmlTxt);    
    while HasMatch do    
      begin    
        //aList.Add(RegExp.Match[0]);    
        aList.Add(RegExp.Match[2]+'='+RegExp.Match[1]);     
        HasMatch := RegExp.ExecNext;    
      end;    
  finally    
     FreeAndNil(RegExp);    
  end;    
end;
//解析网页源码内容,用正则表达式读取所需链接。   
procedure ParsePageContent(pageText:String; var aList:TStringList);    
var aPattern:String;    
begin    
   //正则表达式    
   //链接形如:<A href="http://ex01/public/abcdf.doc?attach=1">http://ex01/public/abcdf.doc?attach=1" TARGET="_blank" ><FONT color="#000000">附件1.doc(37KB)</FONT></A>    
   aPattern:= '<A\s+href\s*=\s*""{0}([^>].*?)\?attach=1""{0}\s*TARGET\s*=\s*""{0}_blank""{0}\s*>\s*<FONT\s+color\s*=\s*""{0}#000000""{0}>(.*?)\(([\d]+)KB\)\s*</FONT>\s*</A>';
   GetLinkFromHtml(pageText,aPattern,aList); //使用正则表达式,匹配网页内容。   
end;
//读取网页源码,从网页中得到文件的链接地址以及文件名称等内容。   
//返回参数:HrefList。    
procedure GetLinkList(EFileLink,Domain,UserName,PassWD:string; var HrefList:TStringList);    
var aIdHTTP:TIdHTTP;    
    WebHTTPContent:String;    
begin    
   aIdHTTP:=TIdHTTP.Create(nil);
   try   
     aIdHTTP.Request.BasicAuthentication:=True;  //设置权限    
     aIdHTTP.Request.Username:=Domain+'\'+UserName;    
     aIdHTTP.Request.Password:=PassWD;
     //识别浏览器   
     aIdHTTP.Request.UserAgent:='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)';    
     aIdHTTP.Request.Accept:='image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*';    
     aIdHTTP.Request.ContentType:='text/xml; charset=''UTF-8''';
     aIdHTTP.Request.Connection:='Keep-Alive';   
     aIdHTTP.Request.Method:=(hmGet);//设置Request的方法
     //得到网页的内容(以OWA方式可打开)   
     //EFileLink:='http://ex01/public/工作流程/关于调整设备类型的通知.EML';    
     WebHTTPContent:=aIdHTTP.Get(EFileLink);
     //UTF8解码   
     WebHTTPContent:=Utf8Decode(WebHTTPContent);
     //解析网页源码  
     ParsePageContent(WebHTTPContent, HrefList);    
   finally    
     FreeAndNil(aIdHTTP);    
   end;    
end;
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号