我想用delphi写一个web页信息提取的程序,有些问题请教。

heyan_zjsx 2006-08-25 03:58:57
我用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;

.....


谢谢了.

...全文
133 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
dabaicai 2006-08-28
这是我上传函数里面的,上传成功后,页面会有成功上传的字样,截取出来
Results := IdHTTP1.Post(URL2,MutPartForm);
if Pos('成功上传',Results) > 0 then
Result := True;
回复
vincentJsp 2006-08-28
反正没事干,举个例子
var
doc:IHTMLDocument2;
all:IHTMLElementCollection;
item:IHTMLElement;
i:Integer;
begin
doc:=IHTMLDOcument2(web1.document);
all:=doc.all;
for i:=0 to all.length-1 do
begin
item:=all.item(i,varEmpty) as IHTmlelement;
if item.tagname='img' then
<处理代码>
end;
end;
回复
vincentJsp 2006-08-28
用server里的webbrowser,用webbrowser来浏览网页,然后在ondowncomplete事件里写。
然后IHTMLDocument(webbrowser.document)就可以提取网页中各个不同的元素了,还有问题可以联系我
回复
skypeople 2006-08-25
你用POS當然有問題,稍雜複雜一點的東西就可以讓你焦頭爛額;你應該去找一個HTML的解析器,網上有;
回复
heyan_zjsx 2006-08-25
dabaicai(不再做菜鸟),
你的程序能不能给我参考一下?
回复
dabaicai 2006-08-25
不会吧,我以前做的是唯一的就可以啊

Trim(edit.text) 加上,防止edit里面有空格
回复
newbdelphi 2006-08-25
难度
回复
heyan_zjsx 2006-08-25
我考虑过这个问题,但是恰好是唯一的情况下,也是不正确的。或者用其他方法,能不能给我一些建议。谢谢你。
回复
dabaicai 2006-08-25
但是程序执行结果不正确。不知道我这种方法是不是有问题?

你用的是是HTML里面的东西来pos,但这个东西在你得到的网页里面可能很多,而你要的又不是第一个pos出来的位置,所以很可能不正确

方法是你必须在你得到的网页字符串里面,通过某个唯一的标示来寻找你要的东西,像><br><h><br><b>这样的东西太多了,不行
回复
相关推荐
发帖
Delphi
创建于2007-08-02

4894

社区成员

Delphi 开发及应用
申请成为版主
帖子事件
创建了帖子
2006-08-25 03:58
社区公告
暂无公告