



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
下述为新闻采集程序,在理解了新闻采集程序的基础之上就可以做出网络爬虫程序了.今天,我们讨论的是网站新闻采集程序的制作。所谓新闻采集程序,就是自动抓取网上信息,并保存到自己网站数据库的一种程序。现在很多大型网站都有自己的新闻采集系统,其中许多采集系统价值不菲。通过这篇文章,我希望大家都能自己做一个采集程序,来维护自己的网站。为了便于理解,先阐述一下本文的新闻采集程序的一些基本信息。这里的新闻系统,是用delphi实现,并将采集到的数据保存到本地access数据库。所以,这将是一个基与桌面的采集程序,而不是类似“动易采集”的基于浏览器。个人认为,基于桌面的采集系统,更容易实现强大的功能,有更高的稳定和安全性能。而经过扩展,大家完全可以把这个例子做成可以访问远程数据库的大型采集系统。在说如何制作采集程序之前,我们先来定义一个本地access数据库,用来存取采集到的信息。这个数据库只有一个表,表名”T_Article”,该表有ArticleID、ClassID、Title、Keyword、CopyFrom、Content六个字段,分别代表新闻的编号、类别编号、标题、关键字、出处、内容。首先,所谓采集,第一步当然是要能抓取信息,并且是能按照用户的要求,从网上抓取相关信息。这里假设我们要抓取 /article/69/69929.shtm 的文章,加到自己网站的“delphi技术”这么一个栏目。首先要做的,是读取 /article/69/69929.shtm 上的文章列表,然后通过列表索引,逐篇将文章正文内容读到我们的网站数据库。接下来将是关键,如何采集 /article/69/69929.shtm 上的文章列表。这里分为两步,一、利用delphi网络功能,读取69929.shtm的HTML源文件。二、通过分析69929.shtm的源文件,截取其中列表部分。第一步的实现,可以用delphi的indy控件族的idHTTP控件,该控件在indy Clients面板,该控件的具体使用,将在后面讲解,现在我们只要知道,给定一个URL地址,就能通过indy控件返回该URL的网页源代码。第二步的实现,则是简单的字符串处理了。我们先来讨论第二步如何实现,打开/article/69/69929.shtm ,可以看到左边是“我的技术中心”“最新文档列表”等东西,这些和我们没有关系。右边则是一篇篇文章的列表,这些就是我们要的。如何截取列表里的内容呢?查看网页的源代码,CTRL+F查找“标题”,可以发现这样一段代码: 标题 对了,这就是列表的开始,那么列表结束的位置,显然是在这里:共 2475 篇文章 第 1/71 页第一页 |上一页 |下一页 |末页 |跳转到 1 接下来,我们要做的只是利用字符串函数,截取这两段代码中间的部分“文章列表”。具体函数,也将在后面详细讲解。得到文章列表后,我们还要进一步处理,截取出每篇文章的url地址,因为前边已经讲过,给定一个url,idHTTP控件能够返回网页代码。当我们返回文章列表里每篇文章的源代码的时候,就等于说把文章内容采集回来了,只要进一步分析处理,就能保存进本地数据库,从而完成采集工作。那么如何取得文章列表里每篇文章的url呢?通过查看69929.shtm的源文件,我们发现列表里的每个超链接是这样的格式:Oracle中通过存储过程中返回数据集及在Delphi中使用 。显然,我们只要截取出 “rticle/68/68316.shtm”,再加上/article/69就是“Oracle中通过存储过程中返回数据集及在Delphi中使用”这篇文章的URL了。现在,假设我们已经取得了列表中每篇文章的URL,我们只循环读取每篇文章的网页代码,再利用HTML里的特征字符,分离出文章的“标题”、“作者”、“出处”、“内容”等信息,然后一一保存进本地数据库。具体实现首先,程序将用到idHTTP控件(在indy Clients面板)。关于该控件的详细文档,E文好的朋友可以登陆这里查看:/rfc/rfc2616.txt 本程序用到的GET方法在第53页。网上关于indy的帮助文档也整理了不少,可是我一直没找到中文的。在本程序中,我们只使用idHTTP控件的一个方法,就是idHTTP1.GET 方法。该方法是这样声明的:function Get(AURL: string): string; overload;AURL参数,是string类型,指定一个URL地址字符串。函数返回也是string类型,返回网页的HTML源文件。比如我们可以这样调用:tmpStr:= idHTTP1.Get();调用成功后,tmpstr变量里存储的就是网易主页的代码了。接下来,讲一下数据的截取,这里,我定义了这么一个函数:function TForm1.GetStr(StrSource,StrBegin,StrEnd:string):string;varin_star,in_end:integer;beginin_star:=AnsiPos(strbegin,strsource)+length(strbegin);in_end:=AnsiPos(strend,strsource);result:=copy(strsource,in_sta,in_end-in_star);end;解释一下该函数的三个参数:StrSource:string类型,表示HTML源文件。StrBegin:string类型,表示截取开始的标记。StrEnd:string,表示截取结束的标记。函数返回字符串StrSource中从StrSource到StrBegin之间的一段文本。比如:strtmp:=TForm1.GetStr(123456789,12,78);运行后,strtmp的值为:3456。关于函数里用到的AnsiPos和copy,都是系统定义的,可以从delphi的帮助文件里找到相关说明,我在这里也简单罗嗦一下:function AnsiPos(const Substr, S: string): Integer返回Substr在S中第一次出现的位置。function copy(strsource,in_sta,in_end-in_star): string;返回字符串strsource中,从in_sta(整型数据)开始到in_end-in_star(整型数据)结束的字符串。有了以上函数,我们就可以通过设置各种标记,来截取想要的文章内容了。在程序中,比较麻烦的是我们需要设置许多标记,要定位某一项内容,必须设置它的开始和结束标志。比如要取得网页上的文章标题,必须事先查看网页代码,查看出文章标题前边和后边的一些特征代码,通过这些特征代码,来截取文章的标题。下面我们来实际演示一下,假设要采集的文章地址为/test.htm代码为:新建网页 1文章标题作者出处这里是文章内容正文。第一步,我们用StrSource:= idHTTP1.Get(/test.htm);将网页代码保存在strsource变量中。然后定义strTitle、strAuthor、strCopyFrom、strContent:strTitle:= GetStr(StrSource, , ):strAuthor:= GetStr(StrSource, , ):strCopyFrom:= GetStr(StrSource, , ):strContent:= GetStr(StrSource, , ):这样,就能把文
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年信息技术对社会的影响考试试卷及答案
- 2025年师范生教育理论考试试题及答案
- 2025年气候变化与应对考试试题及答案
- 2025年会计电算化考试试卷及答案解析
- 2025年化学专业认证考试试卷及答案
- 2025年电子商务运营师培训考试试题及答案
- 2025年供应链金融与风险控制考试试题及答案
- 2025年广告学专业理论知识测试试题及答案
- 农业项目农产品采购协议
- 岳阳楼记文章主旨和修辞教学教案
- 仪器仪表制造职业技能竞赛理论题库
- 回迁楼房买卖合同协议书
- 营业执照转让合同范本
- 劳务外包劳务合同范本
- Unit 5 Here and Now Section B 1a-1d 课件 2024-2025学年人教版七年级英语下册
- 文旅产业项目商业计划书
- 2025年公共财政与预算考试试卷及答案
- 计算机WPS基础知识试题及答案汇编
- 2025年医保知识培训试题:医保患者权益保障与医疗保险报销时限试卷
- 2025年人工智能基础知识知识考核试卷及答案
- 2025河南大河网数字科技有限公司招聘74人522截止笔试参考题库附带答案详解
评论
0/150
提交评论