动易DELPHI、VC、VB、JB、AURL、string区别

优采云 发布时间: 2021-03-24 04:13

  动易DELPHI、VC、VB、JB、AURL、string区别

  谈到网页采集,人们通常认为他们从Internet窃取数据,然后将采集的数据发布到自己的Internet中。实际上,您还可以将采集中获得的数据用作公司的参考,或者将采集的数据与公司的业务等进行比较。

  当前,网页采集主要是3P代码(3P表示ASP,PHP,JSP)。 BBS新闻采集系统和Internet上传播的新浪新闻采集系统中最具代表性的都是ASP程序,但是从理论上讲速度不是很好。如果您尝试使用其他软件的多线程采集,速度会更快吗?答案是肯定的。您可以使用DELPHI,VC,VB或JB,但是PB似乎相对困难。以下使用DELPHI来解释采集网页数据。

  一、简单新闻采集

  新闻采集是最简单的,只要您确定标题,副主题,作者,出处,日期,新闻正文和分页符即可。必须在采集之前获取网页的内容,因此在DELPHI中(在indy Clients面板中)添加idHTTP控件,然后使用idHTTP 1. GET方法获取网页的内容。声明如下:

  function Get(AURL:string):字符串;超载;

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

  tmpStr:= idHTTP 1. Get(‘’);

  呼叫成功后,网易主页代码存储在tmpstr变量中。

  接下来,我们来谈谈数据拦截。在这里,我定义了这样一个函数:

  函数TForm 1. GetStr(StrSource,StrBegin,StrEnd:string):string;

  var

  in_star,in_end:integer;

  开始

  in_star:= AnsiPos(strbegin,strsource)+ length(strbegin);

  in_end:= AnsiPos(strend,strsource);

  结果:= copy(strsource,in_sta,in_end-in_star);

  end;

  StrSource:字符串类型,表示HTML源文件。

  StrBegin:字符串类型,指示侦听开始的标记。

  StrEnd:字符串,表示拦截结束的标记。

  The

  函数将字符串StrSource中的一段文本从StrSource返回到StrBegin。

  例如:

  strtmp:= TForm 1. GetStr('A123BCD','A','BC');

  运行后,strtmp的值为:“ 123”。

  关于函数中使用的AnsiPos和副本,两者均由系统定义。您可以在delphi的帮助文件中找到相关说明。我还将在这里简单地谈论它:

  函数AnsiPos(const Substr,S:string):整数

  返回Substr在S中第一次出现的位置。

  函数复制(strsource,in_sta,in_end-in_star):字符串;

  将字符串源中的从in_sta(整数数据)开始的字符串返回到in_end-in_star(整数数据)。

  使用上述功能,我们可以通过设置各种标签来截取文章的所需内容。在程序中,更麻烦的是我们需要设置许多标记。要查找某个内容,必须设置其开始和结束标记。例如,要获取网页上的文章标题,您必须预先检查网页代码,在文章标题前后检查一些功能代码,然后使用这些功能代码截取文章。

  下面我们实际进行演示,假设采集的文章地址为

  代码是:

  文章标题

  作者

  来源

  这是文章的内容。

  第一步,我们使用StrSource:= idHTTP 1. Get(’);将网页代码保存在strsource变量中。

  然后定义strTitle,strAuthor,strCopyFrom,strContent:

  strTitle:= GetStr(StrSource,’

  ’,’

  ’):

  strAuthor:= GetStr(StrSource,’

  ’,’

  ’):

  strCopyFrom:= GetStr(StrSource,’

  ’,’

  ’):

  strContent:= GetStr(StrSource,’

  ,

  ’):

  通过这种方式,可以将文章的标题,副标题,作者,出处,日期,内容和分页分别存储在上述变量中​​。

  第二步是使用循环方法打开下一页,获取内容,并将其添加到strContent变量中。

  StrSource:= idHTTP 1. Get(‘new_ne.asp’);

  strContent:= strContent + GetStr(StrSource,’

  ,

  ’):

  然后判断是否存在下一页,如果存在,则获取下一页的内容。

  这完成了一个简单的拦截过程。从上面的程序代码中,我们可以看到我们使用的拦截方法是找到被拦截内容的开头和结尾。如果有多个头和尾,该怎么办?似乎没有办法,只能找到第一个,因此在查找之前,您应该验证被拦截的内容之前和之后只有一个地方。

  以上内容没有程序验证,仅供参考,如果您认为有用,可以尝试。

  ///

  使用Delphi下载网页

  创建一个新项目,放置一个TIdHTTP控件,一个TIdAntiFreeze控件和一个TProgressBar以显示下载进度。最后,放置一个TButton开始执行我们的命令。代码如下:

  过程TForm 1. Button2Click(Sender:TObject);

  var

  MyStream:TMemoryStream;

  开始

  IdAntiFreeze 1. OnlyWhenIdle:= False; //该设置使程序做出反应。

  MyStream:= TMemoryStream.Create;

  尝试

  //下载我的网站的ZIP文件

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线