关键词: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" 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;
By JRQ
2007.05.28于石
分享到:
相关推荐
Delphi的rest与idhttp的post提交+源码+测试可用
服务器监听来自idHttp的数据,运行两个实例中的程序,可以相互发送文字信息或文件了,
分享一个示例代码,这是从网上下载的delphi7,六种idHttp.post的方法,经测试验证,可用,需在delphi7 IDE环境里安装indy idHttp控件,否则会打不开
delphi操作IdHTTP报头读写 delphi操作IdHTTP报头读写
delphi idhttp 循环 Post
delphi +aps idhttp上传文件
使用IdHttp下载文件并显示下载进度条,下载进度采取windows消息通知的方式来显示
delphi 7 idhttp post 的8种使用方法(含源码),介绍了8种使用方法,供学习交流使用。
用delphi7 + idhttp做的投票软件
IDHTTP断点下载,类似迅雷断点下载IDHTTP断点下载,类似迅雷断点下载IDHTTP断点下载,类似迅雷断点下载
使用delphi XE的IdHTTP控件POST的例子,IDHTTP速度很快,是个不错的控件
Delphi第三方组件idhttp post方法的详细演示。 具体说明见:http://blog.csdn.net/none01/article/details/8657543
练习:JAVA 服务端(SERVLET3.1) + DELPHI客户端(IDHTTP) 三层开发。 练习笔记《Delphi XE8 IDHTTP1.get()方法從Servlet 服务器取json数据.doc》。 已经实现基本的 提交 新增、修改、删除、查询SQL命令功能。 开发...
idhttp 使用代理访问20100303
Delphi 7 IdHTTP 链接 https 用到的indy动态链接库文件libeay32.dll和ssleay32.dll,是自己从官网下载测试后能用的。Windows 7 64位。在Delphi7自带的indy运行正常。
Delphi第三方组件idhttp get方法的详细演示。 具体说明见:http://blog.csdn.net/none01/article/details/8657822
IdHTTP1postget下载
利用idhttp进行多线程下载,带进度条显示,可以暂停下载和继续下载,未使用第三方控件,在delphi xe7下测试通过。 昨天发的代码发现一个bug,就是无论几线程,都是从文件首部开始下载,才发现xe7下idhhtp控件的...
利用idhttp进行多线程下载,带进度条显示,可以暂停下载和继续下载,未使用第三方控件,在delphi xe7下测试通过。
delphi 7 idhttp post 的8种使用方法(含源码),介绍了8种使用方法,供学习交流使用。