用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
代码为:

<html>

<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>
新建网页 1</title>
</head>

<body>

<p align="center"><b>
文章标题</b></p>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
<tr><td width="60%">
作者</td>
<td width="40%">
出处</td></tr>
</table>
<p><font size="2">
这里是文章内容正文。</font></p>

</body>

</html>

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


然后定义strTitlestrAuthorstrCopyFromstrContent
strTitle:= GetStr(StrSource,’ <p align="center"><b>’,’ </b></p>’):
strAuthor:= GetStr(StrSource,’ <tr><td width="60%">’,’ </td>’):
strCopyFrom:= GetStr(StrSource,’ <td width="40%">’,’ </td></tr>’):
strContent:= GetStr(StrSource,’ <p><font size="2">,’ </font></p>’):

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

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


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


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

小小天堂 2005/05/22

 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值