动易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文件