zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    文件内容排名算法,输入排名函数,返回排名后的文件名
    线段树做大数据排序
    给字符排序-基类排序二分查找-JavaScript
    后缀数组、名次数组-JavaScript
    二分查找法、二分去重排序法,返回最接近的位置和实际位置
    用四叉树对图像分类,获取tag和key
    Linux显示所在Git分支
    Linux中设置Git显示颜色
    屏蔽网页广告
    tf.add_to_collection,tf.get_collection简介
  • 原文地址:https://www.cnblogs.com/94YY/p/2199349.html
Copyright © 2011-2022 走看看