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;

posted @   星星的学习小志  阅读(369)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示