php 网页内容抓取(BBS采集多为3P代码为多(3))

优采云 发布时间: 2022-04-16 03:19

  php 网页内容抓取(BBS采集多为3P代码为多(3))

  人们在抓取网页内容时,通常认为是从互联网上窃取数据,然后将采集到的数据链接到自己的互联网上。其实您也可以将采集采集的数据作为公司的参考,或者将采集到的数据与自己公司的业务进行比较。

  目前网页采集多为3P代码(3P为ASP、PHP、JSP)。使用的最有代表性的是BBS的新闻采集系统,以及网上流传的新浪新闻采集系统,都是使用ASP程序,但是理论上速度不是很好。用其他软件采集尝试多线程不是更快吗?答案是肯定的。你可以使用DELPHI、VC、VB或JB,但PB似乎更难做。下面使用 DELPHI 来解释 采集 网页数据。

  一、 简单新闻采集

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

  函数获取(AURL:字符串):字符串;超载;

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

  tmpStr:= idHTTP1.Get('');

  调用成功后,网易首页的代码保存在tmpstr变量中。

  接下来说说数据的截取。在这里,我定义了这样一个函数:

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

  变量

  in_star,in_end:整数;

  开始

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

  in_end:=AnsiPos(strend,strsource);

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

  结尾;

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

  StrBegin:字符串类型,表示截取开始的标志。

  StrEnd:字符串,标记截取的结束。

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

  例如:

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

  运行后strtmp的值为:'123'。

  关于函数中使用的AnsiPos和copy,都是系统定义的。可以在delphi的帮助文件中找到相关说明。我这里也简单说一下:

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

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

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

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

  有了上面的函数,我们就可以通过设置各种标签来截取想要的文章内容。在程序中,我们需要设置很多标记比较麻烦。为了定位某个内容,我们必须设置它的开始和结束标记。比如要获取网页上文章的标题,必须提前查看网页的代码,查看文章标题前后的一些特征码,并使用这些截取 文章 标题的特征代码。

  让我们在实践中演示一下,假设 文章 的地址为 采集 是

  代码是:

  文章标题

  作者

  出处

  这是 文章 内容主体。

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

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

  strTitle:= GetStr(StrSource,'

  ','

  '):

  strAuthor:= GetStr(StrSource,'

  ','

  '):

  strCopyFrom:= GetStr(StrSource,'

  ','

  '):

  strContent:= GetStr(StrSource,'

  ,'

  '):

  这样文章的标题、副标题、作者、出处、日期、内容和分页就可以分别存储在上述变量中​​。

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

  StrSource:= idHTTP1.Get('new_ne.asp');

  strContent:= strContent +GetStr(StrSource,'

  ,'

  '):

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

  这样就完成了一个简单的拦截过程。从上面的程序代码可以看出,我们使用的截取方式是找到截取内容的头尾。如果有多个头和尾怎么办?好像没办法,只会找到第一个,所以在找之前要先验证一下截取的内容是否只有一个正反面。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线