用delphi制作新闻采集程序(二)

在前一篇文章里,我们讨论了新闻采集程序的原理。今天要来具体实现了。

首先,程序将用到idHTTP控件(在indy Clients面板)。关于该控件的详细文档,E文好的朋友可以登陆这里查看:http://www.rfc-editor.org/rfc/rfc2616.txt 本程序用到的GET方法在第53页。网上关于indy的帮助文档也整理了不少,可是我一直没找到中文的。在本程序中,我们只使用idHTTP控件的一个方法,就是idHTTP1.GET 方法。该方法是这样声明的:

 

function Get(AURL: string): string; overload;

AURL
参数,是string类型,指定一个URL地址字符串。函数返回也是string类型,返回网页的HTML源文件。比如我们可以这样调用:

tmpStr:= idHTTP1.Get(‘http://www.163.com’);

调用成功后,tmpstr变量里存储的就是网易主页的代码了。

接下来,讲一下数据的截取,这里,我定义了这么一个函数:


function TForm1.GetStr(StrSource,StrBegin,StrEnd:string):string;
var
in_star,in_end:integer;
begin
in_star:=AnsiPos(strbegin,strsource)+length(strbegin);
in_end:=AnsiPos(strend,strsource);
result:=copy(strsource,in_sta,in_end-in_star);
end;


解释一下该函数的三个参数:

StrSourcestring类型,表示HTML源文件。

StrBeginstring类型,表示截取开始的标记。

StrEndstring,表示截取结束的标记。

函数返回字符串StrSource中从StrSourceStrBegin之间的一段文本。

比如:
strtmp:=TForm1.GetStr(‘123456789’,‘12’,‘78’);

运行后,strtmp的值为:’3456’

 

关于函数里用到的AnsiPoscopy,都是系统定义的,可以从delphi的帮助文件里找到相关说明,我在这里也简单罗嗦一下:

function AnsiPos(const Substr, S: string): Integer

返回SubstrS中第一次出现的位置。

function copy(strsource,in_sta,in_end-in_star): string;

返回字符串strsource,in_sta(整型数据)开始到in_end-in_star(整型数据)结束的字符串。

有了以上函数,我们就可以通过设置各种标记,来截取想要的文章内容了。在程序中,比较麻烦的是我们需要设置许多标记,要定位某一项内容,必须设置它的开始和结束标志。比如要取得网页上的文章标题,必须事先查看网页代码,查看出文章标题前边和后边的一些特征代码,通过这些特征代码,来截取文章的标题。

 

下面我们来实际演示一下,假设要采集的文章地址为http://www.xxx.com/test.htm
代码为:








</span><span style="font-size:10pt;font-family:'宋体';">新建网页</span><span style="font-size:10pt;font-family:Tahoma;"> 1




文章标题





作者出处

这里是文章内容正文。







第一步,我们用
StrSource:= idHTTP1.Get(‘http://www.xxx.com/test.htm’);
将网页代码保存在strsource变量中。


然后定义strTitlestrAuthorstrCopyFromstrContent
strTitle:= GetStr(StrSource,’

’,’

’):
strAuthor:= GetStr(StrSource,’ ’,’ ’):
strCopyFrom:= GetStr(StrSource,’ ’,’ ’):
strContent:= GetStr(StrSource,’

,’

’):

这样,就能把文章的标题、作者、出处和内容分别存储在以上变量中。

这样就完成了一个简单的截取过程。


最后,是将变量的值存储到本地数据库,这一步不讲了,相信大家都会。


以上的例子,非常简单,如果真正做一个采集程序,还有许多实际因素要考虑进去。比如:错误处理、多线程采集、远程入库、文章内广告内容的过滤、自动分类等等。

小小天堂 2005/05/22

 

你可能感兴趣的:(编程小记,delphi,string,function,integer,microsoft,generator)