我想用delphi写一个web页信息提取的程序,有些问题请教。
我用delphi写一个程序,来获得有共同特征的一些网页中的某些数据。比如,现在很多网站用asp写,其中文章浏览页viewinfo.asp,用一个参数id,然后url为:http://xxxx/viewinfo.asp?id=x,这些网页的特定数据可以被提取出来,因为 他们在一个有规则的位置中。
我的大致思路这样,用idhttp组件获得网页源代码,然后用字符串处理找到特定的数据。不过,因为delphi用得不是很熟,所以遇到困难很多。
1、比如源代码片断是<font size='4'><br><h><br><b>来源:</b>新浪网</font><tr> 作者:.....,我想取出新浪网这个数据(不同网页他是变化的),我是这样做的:用<font size='4'><br><h><br><b>来源:</b>这个字符串作为前置字符串,在htmlstr源代码字符串中找出位置,用pos函数,同样道理,用pos函数得到特定字符串的后面的字符串的位置,然后用midstr取出中间段即是我需要的内容。但是程序执行结果不正确。不知道我这种方法是不是有问题?
部分源代码在这里:
procedure TForm1.Button1Click(Sender: TObject);
var
MyStream:TMemoryStream;
begin
IdAntiFreeze1.OnlyWhenIdle:=False;//设置使程序有反应.
MyStream:=TMemoryStream.Create;
try
//下载我站点的一个ZIP文件
IdHTTP1.Get('http://www.138soft.com/download/Mp3ToExe.zip',MyStream);
except//INDY控件一般要使用这种try..except结构.
Showmessage('网络出错!');
MyStream.Free;
Exit;
end;
MyStream.SaveToFile('c:\Mp3ToExe.zip');
MyStream.Free;
Showmessage('OK');
end;
....
try
MyStr:=IdHTTP1.Get(edit1.Text) ; mystr保存网页源代码
except
Showmessage('网络出错!');
Exit;
end;
//Showmessage(MyStr);
.....
prePosOfTopic:=pos(edit2.Text,mystr)+length(edit2.Text) ;
nextPosOfTopic:=pos(edit3.Text,mystr)-1;
topicStr:=midstr(mystr,preposoftopic,nextposoftopic-preposoftopic+1);
memo1.Text:=topicstr;
.....
谢谢了.