批量下载网页 ( 积分: 80 )

  • 主题发起人 主题发起人 eonzhang
  • 开始时间 开始时间
E

eonzhang

Unregistered / Unconfirmed
GUEST, unregistred user!
如何批量下载网页,已经有网页的链接(URL),用什么方法来批量下载这些网页的内容?
 
没人回答,自己顶一下
 
本公司诚聘软件工程师数名,要求大专以上学历,计算机专业,熟练掌握DELPHI+SQL编程,能开发C/S 或B/S结构的应用软件,二年以上工作经验,有在软件公司工作经验优先考虑。有意者请联系QQ419682853,邮箱:ljy42af@gdou.com
 
idhttp.get对于一般的情况是可是实现,但是对于“请求资源暂时移动到另一个URL上”这样的问题,就会出错。我的思路是:如果出现这样的情况,就判别idhttp的相应码,采取相应的措施,但是不知道如何实现这一过程,请各位继续给以帮助。
 
用线程下载,线程代码如下:
unit ThrDown;

interface

uses
Classes,StdCtrls,Windows,Dialogs,SysUtils,wininet,UrlMon;

var
CS:TRTLCriticalSection; //定义全局临界区

type
T1 = class(TThread)
private
TmpS1,TmpS2: string;
protected
procedure Execute; override;
public
constructor Create(S1,S2: string);
end;

implementation

uses Unit1;

{ T1 }

constructor T1.Create(S1,S2: string);
begin
TmpS1 :=S1;
TmpS2 :=S2;
FreeOnTerminate := True; // 自动删除
InitializeCriticalSection(CS); //初始化临界区
inherited Create(False); // 直接运行
end;

function DownloadFile(Source, Dest: string): Boolean;
begin
try
Result := UrlDownloadToFile(nil, PChar(source), PChar(Dest), 0, nil) = 0;
except
Result := False;
end;
end;

procedure T1.Execute;
begin
EnterCriticalSection(cs); //进入临界区
DownloadFile(TmpS1,TmpS2);
LeaveCriticalSection(CS); //退出临界区
end;
end.

不过最好引用这下载之前定时检查网络通断情况,不然网络意外会很久没有回应的;我是靠检查百度网站来判断网络的:
uses wininet, ThrDown;


function IsInternet: Boolean;
begin
if InternetCheckConnection('http://www.baidu.com/',1,0) then
Result := True
else
Result := False;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
fl,ts: string;
begin
if IsInternet() then
begin
for i := 0 to 20 do
begin
fl:=trim(inttostr(i))+'.txt';
ts1:=.....;
Thread1 := T1.Create(ts1,fl);
Thread1.OnTerminate := ThreadExit;
end;
end;
end;
 
后退
顶部