快速业务通道

PHP中怎样实现文章采集

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-23
注意容错.用SESSION控制可以避免很多麻烦.当 timeout的时候,刷新下就ok了.延长脚本运行时间可以@set_time_limit(0)

  数据采集,大部分是用正则表达式,我简单地介绍下如何实现采集的思路.这里说的是php的实现.一般是本机运行,放到空间上是不明智的,因为不但很耗资源还需要支持远程抓取函数,比如file_get_contents($urls)file($url)等.

  1,文章列表页面的自动切换,以及文章路径的获得.

  2,获得:标题,内容

  3,入库

  4,问题

  1,文章列表页面的自动切换,以及文章路径的获得.

  a,列表页面的自动切换一般依赖动态页面来实现.比如

  http://www.phpfirst.com/foru ... d=1&page=$i

  可以在后面利用$i的自动增加或范围来实现,比如$i++;

  也可以像penzi演示的那个一样,要从第几页到第几页,代码方面控制$i的范围就可以.

  b,文章路径的获得分需要填正则和无需填正则2种:

  1)无需填正则就是获得上面的文章列表页面的所有连接

  但是最好对连接进行过滤,处理---判断重复连接,只留一个,处理相对路径,变成绝对路径.比如../ 和./等.

  以下是我写的乱七八糟的实现函数:

  PHP:

  --------------------------------------------------------------------------------

  

  //$e=clinchgeturl("http://phpfirst.com/forumdisplay.php?fid=1");

  //var_dump($e);

  function clinchgeturl($url)

  {

  //$url="http://127.0.0.1/1.htm";

  //$rootpath="http://fsrootpathfsfsf/yyyyyy/";

  //var_dump($rrr);

  if(eregi(''(.)*[\.](.)*'',$url)){

  $roopath=split("\/",$url);

  $rootpath="http://".$roopath[2]."/";

  $nnn=count($roopath)-1;for($yu=3;$yu<$nnn;$yu++){$rootpath.=$roopath[$yu]."/";}

  // var_dump($rootpath); //http: ,'''',127.0.0.1,xnml,index.php

  }

  else{$rootpath=$url; //var_dump($rootpath);

  }

  if(isset($url)){

  echo "$url 有下列裢接:
";

  $fcontents = file($url);

  while(list(,$line)=each($fcontents)){

  while(eregi(''(href[[:space:]]*=[[:space:]]*"?[[:alnum:]:@/._-]+[\?]?[^\"]*"?)'',$line,$regs)){

  //$regs[1] = eregi_replace(''(href[[:space:]]*=[[:space:]]*\"?)([[:alnum:]:@/._-]+)(\"?)'',"\\2",$regs[1]);

  $regs[1] = eregi_replace(''(href[[:space:]]*=[[:space:]]*[\"]?)([[:alnum:]:@/._-]+[\?]?[^\"]*)(\.*)[^\"\/]*([\"]?)'',"\\2",$regs[1]);

  if(!eregi(''^http:\/\/'',$regs[1])){

  if(eregi(''^\.\.'',$regs[1])){

  // $roopath=eregi_replace(''(http:\/\/)?([[:alnum:]:@/._-]+)[[:alnum:]+](\.*)[[:alnum:]+]'',"http:\/\/\\2",$url);

  $roopath=split("\/",$rootpath);

  $rootpath="http://".$roopath[2]."/";

  //echo "这是根本d :"."\n";

  $nnn=count($roopath)-1;for($yu=3;$yu<$nnn;$yu++){$rootpath.=$roopath[$yu]."/";}

  //var_dump($rootpath);

  if(eregi(''^\.\.[\/[:alnum:]]'',$regs[1])){

  //echo "这是../目录/ :"."\n";

  //$regs[1]="../xx/xxxxxx.xx";

  // $rr=split("\/",$regs[1]);

  //for($oooi=1;$oooi

  $rrr=$regs[1];

  // {$rrr.="/".$rr[$oooi];

  $rrr =

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号