php采集(php小偷)程序设计教程

时间:2024-03-10 20:17:55
 

 


什么是PHP采集程序?
为什么要采集?

采集些什么?
如何采集?
采集范例程序
一些常用的函数

对一个目标网站的全面采集


什么是php采集程序?
    php采集程序,也叫php小偷,主要是用于自动搜集网络上web页里特定内容,用php语言写的web程序,运行于支持php的平台上。谈到“自动搜集”,你可能联想到百度goole,联想到搜索引擎所做的事情。php采集程序,正是做类似的工作。
为什么要采集?

    互联网正以飞快的速度在发展,web数据每天以几何级数据量递增,面对这庞大的数据,作为一个网站管理员的你,该如何搜集自己所需要的信息呢?特别对某个或某几个同类网站,你需要它们的大量信息,来充实你的网站内容,难道就只能复制粘贴的过日子吗?一个网站管理员,你真的就得花大量时间去搞原创内容,而与整个互联网信息量的发展速度脱节吗?这些问题的解决方法只有一个:采集。如果有那么一个程序,你帮你的网站自动或半自动的采集你所需要的特定内容,即时更新你网站的信息,是否是你梦寐以求的呢?这就是采集程序出现的原因所在。
采集些什么?

     这要看你做的什么类型的网站了。如果你做图片站,就采集图片;做音乐站,就采集mp3,做新闻站,就采集新闻等等。一切根据你网站的内容架构需要而定。确定你要采集的东西,才好写出相应的采集程序。

如何采集?
    通常采集程序,都是有的放矢的。也就是需要有目标网站,搜集一些你需要的采集内容的网站,分别对其html代码进行分析,找出规律性的东西,依据你要采集的特定内容,写出php代码。采集到你要的东西以后,你可以选择自己需要的存放方式。比如直接生成html页面,或是放进数据库,作进一步处理或是存放成特定的形式,以备后用。
    针对目标网站,我们可以采用以下方式:
1.使用file()函数,获取目标页面文件流,转换成字符串,作进一步处理.
  一个范例函数:

 

[php] view plain copy
 
  1. //获取目标页面文件流并转换成字符串形式  
  2. function openfile($url)  
  3. {  
  4. if(file($url)){  
  5.         $str = file($url);  
  6.         $count = count($str);  
  7.         for ($i=0;$i<$count;$i++){   
  8.         $file .= $str[$i];  
  9.                           
  10.                                  }  
  11.         return $file;  
  12.               } else { die("文件打开失败!"); }  
  13. }  
  14. 用法举例:  
  15. $getstr=openfile("http://86enjoy.com");  
  16. //getsrt是一个字符串,你可对它作进一步处理。  
2.使用file_get_contents()函数,该函数可以直接将获取的web页面内容转换成字符串

 

 

[php] view plain copy
 
  1. $getstr=file_get_contents("http://86enjoy.com");  
  2. //getsrt就是一个字符串,你可对它作进一步处理。  
3.使用Microsoft.XMLHTTP组件方式。不过该组件需要windows平台支持,它是windows的一个组件,php程序以com形式调用它。
范例程序:

 

 

[php] view plain copy
 
  1. <?php  
  2. //Microsoft.XMLHTTP组件使用范例程序get.php  
  3. //作者:天涯风云  
  4. $url=$_GET[\'id\'];  
  5. $xmlhttp = new COM("Microsoft.XMLHTTP") or die("无法创建Microsoft.XMLHTTP组件!");  
  6. $xmlhttp->open("GET",$url,False, "", "");  
  7. $xmlhttp->setRequestHeader("content-Type","text/html");  
  8. $xmlhttp->send();  
  9. $body=$xmlhttp->responseText;  
  10. echo $body;  
  11. ?>  
  12. 用法:get.php?id="目标页面"  

4.使用fsockopen()函数,获取文件流
范例程序:
[php] view plain copy
 
  1. function request_url($url,$method=\'POST\') {  
  2. $url = parse_url($url); //解析url地址,取得host,path,port,query等  
  3. if (!$url) return "couldn\'t parse url";  
  4. if (!isset($url[\'port\'])) { $url[\'port\'] = ""; }  
  5. if (!isset($url[\'query\'])) { $url[\'query\'] = ""; }  
  6. //连接服务器  
  7. $fp = fsockopen($url[\'host\'], $url[\'port\'] ? $url[\'port\'] : 80);  
  8. if (!$fp) return "不能连接".$url[\'host\']."服务器";  
  9. //发送请求  
  10. fputs($fp, sprintf("$method %s%s%s HTTP/1.0/n", $url[\'path\'], $url[\'query\'] ? "?" : "", $url[\'query\']));  
  11. fputs($fp, "Host: $url[host]/n");  
  12. fputs($fp, "Content-type: application/x-www-form-urlencoded/n");  
  13. fputs($fp, "Connection: close/n/n");  
  14. //获得请求后返回的内容  
  15. $line = fgets($fp,1024);  
  16. if (!eregi("^HTTP/1/.. 200", $line)) return;  
  17. $results = "";   
  18. while(!feof($fp)) {  
  19. $line = fgets($fp,1024);  
  20. $results .= $line;  
  21. }  
  22. fclose($fp);  
  23. return $results;  
  24. }  
  25.   
  26. 函数用法:  
  27. $getstr=request_url("目标页面");  
  28. //getstr是一个字符串,你可对它作进一步处理。  
采集范例程序
采集范例程序1
获取sina网上的某个城市的天气信息
//sinatianqi.php
[php] view plain copy
 
  1. <?php  
  2. /* 此程序是从新浪网的天气网页[url]http://php.weather.sina.com.cn/search.php?city=[/url]某个城市名,取得天气信息*/  
  3. ob_start();  //启动输出缓冲  
  4. function request_url($url,$method=\'POST\') {  
  5. $url = parse_url($url); //解析url地址,取得host,path,port,query等  
  6. if (!$url) return "couldn\'t parse url";  
  7. if (!isset($url[\'port\'])) { $url[\'port\'] = ""; }  
  8. if (!isset($url[\'query\'])) { $url[\'query\'] = ""; }  
  9. //连接服务器  
  10. $fp = fsockopen($url[\'host\'], $url[\'port\'] ? $url[\'port\'] : 80);  
  11. if (!$fp) return "不能连接".$url[\'host\']."服务器";  
  12. //发送请求  
  13. fputs($fp, sprintf("$method %s%s%s HTTP/1.0/n", $url[\'path\'], $url[\'query\'] ? "?" : "", $url[\'query\']));  
  14. fputs($fp, "Host: $url[host]/n");  
  15. fputs($fp, "Content-type: application/x-www-form-urlencoded/n");  
  16. fputs($fp, "Connection: close/n/n");  
  17. //获得请求后返回的内容  
  18. $line = fgets($fp,1024);  
  19. if (!eregi("^HTTP/1/.. 200", $line)) return;  
  20. $results = "";   
  21. while(!feof($fp)) {  
  22. $line = fgets($fp,1024);  
  23. $results .= $line;  
  24. }  
  25. fclose($fp);  
  26. return $results;  
  27. }  
  28. //获得从其它网页传送过来的url(带查询字串)  
  29. if (!$_REQUEST[\'url\']) {  
  30. echo "请添加一个url";  
  31. exit;  
  32. }else{  
  33. $url=$_REQUEST[\'url\'];  
  34. }  
  35. $content=request_url($url); //取得请求后的网页内容  
  36. $start=strpos($content,"<!-- 天气状况 begin -->");//取得天气预报的截取段  
  37. $end=strpos($content,"<!-- 天气状况 end -->");  
  38. $len=$end-$start;  
  39. $b=substr($content,$start,$len); //截取得指定内容  
  40. //从上面的截取段中取得城市今日天气预报的截取段  
  41. $sub_start=strpos($b,"<div class=/"City_Data/">");    
  42. $sub_end=strpos($b,"<div class=/"Weather_SM/">");  
  43. $len2=$sub_end-$sub_start;  
  44. $c=substr($b,$sub_start,$len2);  
  45. $d=split("/n",$c); //去掉换行符  
  46. //print_r($d);  
  47. $e="";  
  48. foreach ($d as $key=>$value){  
  49. $value=strip_tags($value);  //去掉html标记  
  50. $e.=$value;  
  51. if ($key==2) {  
  52.   $e.="<br>";  
  53. }  
  54. }  
  55. echo $e;  
  56. ob_end_flush();  
  57. ?>     
采集范例程序2:取得tom的天气
[php] view plain copy
 
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
  2. <HTML><HEAD><TITLE>天气预报-天气查询-中国美女网</TITLE>  
  3. <META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK   
  4. href="images/home.css" rel=stylesheet>  
  5. <META content="MSHTML 6.00.3790.2759" name=GENERATOR></HEAD>  
  6.   
  7.   
  8. <BODY bgColor=#ffffff leftMargin=0 topMargin=0 marginheight="0" marginwidth="0">  
  9. <center><div>  
  10. <TABLE cellSpacing=0 cellPadding=0 width=774 align=center border=0>  
  11.   <TBODY>  
  12.   <TR>  
  13.     <TD><IMG height=100 src="templates/default/images/top1.jpg" width=770></TD>  
  14.   </TR></TBODY></TABLE>  
  15. <TABLE height=28 cellSpacing=0 cellPadding=0 width=774 align=center border=0>  
  16.   <TBODY>  
  17.   <TR>  
  18.     <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A   
  19.       href="http://www.86mm.com.cn/" target=_blank>首页</A></TD>  
  20.     <TD vAlign=center align=middle width=2   
  21.       background=templates/default/images/tt_r4_c1.jpg><IMG height=22   
  22.       src="templates/default/images/tt_r5_c8.jpg" width=1></TD>  
  23.     <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A   
  24.       href="http://www.huazhongpc.com/html/zouguangtoupai/"   
  25.     target=_blank>走光偷拍</A></TD>  
  26.     <TD vAlign=center align=middle width=2   
  27.       background=templates/default/images/tt_r4_c1.jpg><IMG height=22   
  28.       src="templates/default/images/tt_r5_c8.jpg" width=1></TD>  
  29.     <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A   
  30.       href="http://www.huazhongpc.com/html/jiqingyouhuo/"   
  31.     target=_blank>激情诱惑</A></TD>  
  32.     <TD vAlign=center align=middle width=2   
  33.       background=templates/default/images/tt_r4_c1.jpg><IMG height=22   
  34.       src="templates/default/images/tt_r5_c8.jpg" width=1></TD>  
  35.     <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A   
  36.       href="http://www.huazhongpc.com/html/qingchunnvhai/"   
  37.     target=_blank>清纯女孩</A></TD>  
  38.     <TD vAlign=center align=middle width=2   
  39.       background=templates/default/images/tt_r4_c1.jpg><IMG height=22   
  40.       src="templates/default/images/tt_r5_c8.jpg" width=1></TD>  
  41.     <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A   
  42.       href="http://www.huazhongpc.com/html/meinvzipai/"   
  43.     target=_blank>美女自拍</A></TD>  
  44.     <TD vAlign=center align=middle width=2   
  45.       background=templates/default/images/tt_r4_c1.jpg><IMG height=22   
  46.       src="templates/default/images/tt_r5_c8.jpg" width=1></TD>  
  47.     <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A   
  48.       href="http://www.huazhongpc.com/html/mingxingxiezhen/"   
  49.     target=_blank>明星写真</A></TD>  
  50.     <TD vAlign=center align=middle width=2   
  51.       background=templates/default/images/tt_r4_c1.jpg><IMG height=22   
  52.       src="templates/default/images/tt_r5_c8.jpg" width=1></TD>  
  53.     <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A   
  54.       href="http://www.huazhongpc.com/html/xingaijiankang/"   
  55.     target=_blank>健康 </A></TD>  
  56.       
  57.     <TD vAlign=center align=middle width=2   
  58.       background=templates/default/images/tt_r4_c1.jpg><IMG height=22   
  59.       src="templates/default/images/tt_r5_c8.jpg" width=1></TD>  
  60.     <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A   
  61.       href="http://www.huazhongpc.com/html/mianfeidianying/" target=_blank>免费电影</A></TD>  
  62.     <TD vAlign=center align=middle width=2   
  63.       background=templates/default/images/tt_r4_c1.jpg><IMG height=22   
  64.       src="templates/default/images/tt_r5_c8.jpg" width=1></TD>  
  65.     <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A   
  66.       href="http://www.huazhongpc.com/html/gaoxiaotupian/" target=_blank>搞笑图片</A></TD>  
  67.   <TD vAlign=center align=middle width=2   
  68.       background=templates/default/images/tt_r4_c1.jpg><IMG height=22   
  69.       src="templates/default/images/tt_r5_c8.jpg" width=1></TD>  
  70.     <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A   
  71.       href="http://www.huazhongpc.com/tianqi.php" target=_blank>天气预报</A></TD>  
  72.    </TR></TBODY></TABLE>  
  73.   
  74. <TABLE style="MARGIN-TOP: 2px" cellSpacing=0 cellPadding=0 width=774   
  75. background=images/t2_05.gif border=0>  
  76.   <TBODY>  
  77.   <TR><td>  
  78. <SCRIPT language=JavaScript>  
  79. <!---  
  80. today = new Date();  
  81. var hours = today.getHours();  
  82. var minutes = today.getMinutes();  
  83. var seconds = today.getSeconds();  
  84. var timeValue = "<FONT COLOR=#000000>" + (hours);   
  85. timeValue += ((minutes < 10) ? "<FONT COLOR=#000000>:</FONT></BLINK>0" : "<FONT COLOR=#000000>:</FONT></BLINK>") + minutes+"</FONT></FONT>";  
  86. function initArray(){  
  87. this.length=initArray.arguments.length  
  88. for(var i=0;i<this.length;i++)  
  89. this[i+1]=initArray.arguments[i] }  
  90. var d=new initArray("<font color=#0000ff>星期天","<font color=#000000>星期一","<font color=#000000>星期二","<font color=#000000>星期三","<font color=#000000>星期四","<font color=#000000>星期五","<font color=#FEFF80>星期六");   
  91. document.write("<font color=#000000>",today.getYear(),"年","",today.getMonth()+1,"月","",today.getDate(),"日 </FONT>",d[today.getDay()+1]," "); //-->  
  92. </SCRIPT>   
  93. <font color=#0000ff>(友情提醒:按"Ctrl键+F"查找你所在城市的天气情况)</font><form name="form1" action="http://weather.tq121.com.cn/detail.php">  
  94.                        <input name="city" type="text" size="20">  
  95.                           <input type="submit" value="搜索">  
  96.                       </form>  
  97. </TD></TR>     
  98.   
  99. </TBODY></TABLE>  
  100. <TABLE style="MARGIN-TOP: 2px" cellSpacing=0 cellPadding=0 width=774   
  101. background=images/t2_05.gif border=0>  
  102.   <TBODY>  
  103.   <TR>  
  104.     <TD width=20><IMG height=21 src="images/t2_04.gif" width=13></TD>  
  105.     <TD class=c1 width=153>中国天气查询 </TD>  
  106.     <TD width=14><IMG height=21 src="images/t2_06.gif" width=14></TD>  
  107.     <TD align=right background=images/t2_07.gif>  
  108.           
  109. 数据来源:<A   
  110.       href="http://www.tq121.com.cn/"   
  111.       target=_blank>*气象台</A></TD>  
  112.     <TD width=7><IMG height=21 src="images/t2_08.gif"   
  113.   width=7></TD></TR></TBODY></TABLE>  
  114. <DIV id=guonei_h24 name="guonei_h24">  
  115. <TABLE cellSpacing=1 cellPadding=1 width=774 bgColor=#ababab border=0>  
  116.   <TBODY>  
  117.   
  118. <?php  
  119. $str = file("http://tq.tom.com/china/index.html");  
  120. $count = count($str);  
  121. for ($i=0;$i<$count;$i++){   
  122.     $file .= $str[$i];  
  123. }  
  124. $tomtq = explode("<table width=/"774/" border=/"0/" cellspacing=/"1/" cellpadding=/"1/" bgcolor=/"#ABABAB/">",$file);  
  125. $tomtq = explode("</table>",$tomtq[1]);  
  126. $tomtq= $tomtq[0];  
  127. echo $tomtq;  
  128. ?>  
  129.   
  130.   </TBODY></TABLE>  
  131.   <TABLE cellSpacing=1 cellPadding=0 width=774 align=center border=0>  
  132.   <TBODY>  
  133.   <TR>  
  134.     <TD bgColor=#bbf1ff>  
  135.       <TABLE cellSpacing=5 cellPadding=0 width=774 border=0>  
  136.         <TBODY>  
  137.         <TR>  
  138.           <TD align=middle><A href="http://www.86mm.com.cn/"   
  139.             target=_blank>联系我们</A> <FONT color=#000099>-</FONT>  <A   
  140.             onclick="this.style.behavior=\'url(#default#homepage)\';this.setHomePage(\'http://www.86mm.com.cn\');return false;"   
  141.             href="http://www.86mm.com.cn/#">设置首页</A> <FONT color=#000099>-</FONT>   
  142.             <A href="http://sms.25vod.com/public/fullscreen/golink.php?smsid=107"   
  143.             target=_blank>广告服务</A> <FONT color=#000099>-</FONT> <FONT   
  144.             color=#ff0000><A href="http://sms.25vod.com/public/fullscreen/golink.php?smsid=107"   
  145.             target=_blank>友情链接</A></FONT></TD>  
  146.         </TR>  
  147.         <TR>  
  148.           <TD   
  149.             align=middle>本站内容来自于互联网搜索和网友改编、上传,本站提供的视频、音乐片断仅供网友测试使用,<BR>如发现相关内容侵犯了您的权益,请及时联系我们,本站将会及时予以删除<BR>  
  150.           联系QQ:231734624   
  151.             联系E-mail:wangsua@163.com<BR>  
  152.             Copyright ? 2005-2008 86mm.com.cn Inc. All   
  153.             rights reserved. 华中美女网 版权所有 <BR><script language="javascript" type="text/javascript" src="http://js.users.51.la/882050.js"></script>  
  154. <noscript><a href="http://www.51.la/?882050" target="_blank"><img alt="我要啦免费统计" src="http://img.users.51.la/882050.asp" style="border:none" /></a></noscript><a href=http://www.miibeian.gov.cn/>鄂ICP备06012810号</a><BR>  
  155.             </TD>  
  156.         </TR></TBODY></TABLE></TD></TR></TBODY></TABLE>  
  157.     
  158. </DIV>  
  159. </CENTER></BODY></HTML>  


示范页面:http://86mm.com.cn/tianqi.php

 

一些常用的函数

 

[php] view plain copy
 
  1. // ####################### 获取文件流并转换成字符串 #######################  
  2. function openfile($url)  
  3. {  
  4. if(file($url)){  
  5.         $str = file($url);  
  6.         $count = count($str);  
  7.         for ($i=0;$i<$count;$i++){   
  8.         $file .= $str[$i];  
  9.                           
  10.                                  }  
  11.         return $file;  
  12.               } else { die("文件打开失败!"); }  
  13. }  
  14. // ####################### 切分字符串 #######################  
  15. function cut($start,$end,$file){  
  16.         $content=explode($start,$file);   
  17.         $content=explode($end,$content[1]);   
  18.         return  $content[0];   
  19. }  
  20. // ####################### 清除垃圾代码 #######################  
  21. function del($start,$end,$content){  
  22.        $del=cut($start,$end,$content);  
  23.        $content=str_replace($del,"",$content);  
  24.        $content=str_replace($start.$end,"",$content);  
  25.        return $content;  
  26.         
  27.        
  28. }  
  29. // ####################### 分析域名 #######################  
  30. function getname($url)  
  31. {  
  32. $referer = preg_replace("/https?:////([^//]+).*/i", "//1", $url);  
  33. $referer = str_replace("www.", "", $referer);  
  34. return $referer;  
  35. }  
  36.   
  37. // ####################### 清除HTML代码table #######################  
  38. function clstable($content)  
  39. {  
  40. $clscontent= preg_replace("/<table[^>]*?>.*?<//table>/si", "", $content);  
  41. return $clscontent;  
  42. }  
  43. // ####################### 清除HTML代码script #######################  
  44. function clsscript($content)  
  45. {  
  46. $clscontent= preg_replace("/<script[^>]*?>.*?<//script>/si", "", $content);  
  47. return $clscontent;  
  48. }  
  49. // ####################### 清除HTML代码div #######################  
  50. function clsdiv($content)  
  51. {  
  52. $clscontent= preg_replace("/<div[^>]*?>.*?<//div>/si", "", $content);  
  53. return $clscontent;  
  54. }  
  55.   
  56. // ####################### 清除HTML代码iframe #######################  
  57. function clsifr($content)  
  58. {  
  59. $clscontent= preg_replace("/<IFRAME[^>]*?>.*?<//IFRAME>/si", "", $content);  
  60. return $clscontent;  
  61. }  
  62.   
  63. // ####################### 清除HTML代码tr,td #######################  
  64. function clstrtd($content)  
  65. {  
  66. $clscontent= preg_replace("/<td[^>]*?>.*?<//td>/si", "", $content);  
  67. $clscontent= preg_replace("/<tr[^>]*?>.*?<//tr>/si", "", $clscontent);  
  68. $clscontent= preg_replace("/<tr[^>]*?>/si","",$clscontent);  
  69. $clscontent= preg_replace("/<td[^>]*?>/si","",$clscontent);  
  70. $clscontent= preg_replace("/<//tr>/si","",$clscontent);  
  71. $clscontent= preg_replace("/<//td>/si","",$clscontent);  
  72. return $clscontent;  
  73. }  
  74. // ####################### 清除HTML代码超链接 #######################  
  75. function clsa($content)  
  76. {  
  77. $clscontent= preg_replace("/<a[^>]*?>.*?<//a>/si", "", $content);  
  78. return $clscontent;  
  79. }  
  80. // ####################### 彻底清除所有HTML代码#######################  
  81. function clearhtml($content)  
  82. {  
  83. $search = array ("\'<script[^>]*?>.*?</script>\'si",  // 去掉 javascript  
  84.                  "\'<[///!]*?[^<>]*?>\'si",           // 去掉 HTML 标记  
  85.                  "\'([/r/n])[/s]+\'",                 // 去掉空白字符  
  86.                  "\'&(quot|#34);\'i",                 // 替换 HTML 实体  
  87.                  "\'&(amp|#38);\'i",  
  88.                  "\'&(lt|#60);\'i",  
  89.                  "\'&(gt|#62);\'i",  
  90.                  "\'&(nbsp|#160);\'i",  
  91.                  "\'&(iexcl|#161);\'i",  
  92.                  "\'&(cent|#162);\'i",  
  93.                  "\'&(pound|#163);\'i",  
  94.                  "\'&(copy|#169);\'i",  
  95.                  "\'&#(/d+);\'e");                    // 作为 PHP 代码运行  
  96. $replace = array ("",  
  97.                   "",  
  98.                   "//1",  
  99.                   "/"",  
  100.                   "&",  
  101.                   "<",  
  102.                   ">",  
  103.                   " ",  
  104.                   chr(161),  
  105.                   chr(162),  
  106.                   chr(163),  
  107.                   chr(169),  
  108.                   "chr(//1)");  
  109. $text = preg_replace ($search, $replace, $content);  
  110. return $text;  
  111. }  
  112. // ####################### 写入缓存文件 #######################  
  113. function writetocache($cachedir,$cachename, $cachedata = \'\') {  
  114.     $cachedir = \'./\'.$cachedir.\'/\';  
  115.     $cachefile = $cachedir.$cachename.\'.php\';  
  116.     if(!is_dir($cachedir)) {  
  117.                         @mkdir($cachedir, 0777);  
  118.           }  
  119.     if(!is_dir($cachedir)) {  
  120.       @mkdir($cachedir, 0777);  
  121.     }  
  122.     if(@$fp = fopen($cachefile, \'wb\')) {  
  123.       @fwrite($fp, $cachedata);  
  124.       @fclose($fp);  
  125.       @chmod($cachefile, 0777);  
  126.     } else {  
  127.       echo \'Can not write to cache files, please check directory ./cache/ .\';  
  128.       exit;  
  129.     }  
  130. }  
  131. // ####################### 获取文件里的html链接 #######################  
  132. function geturl($re,$ufile,$rep1,$rep2){  
  133. preg_match_all ($re,  
  134.     $ufile,  
  135.     $out, PREG_PATTERN_ORDER);  
  136. $result=count($out[1]);  
  137. $i=0;  
  138. while($i<$result)  
  139. {  
  140. $outs[$i]=str_replace($rep1,$rep2,$out[1][$i]);  
  141. $i++;  
  142. }  
  143. //合并相同的链接并重新索引...  
  144. $reout=array();  
  145. $reout=resetar($outs);  
  146. return $reout;  
  147. }  


对一个目标网站的全面采集
对一个目标网站的全面采集,包括以下几个步聚:
1。分析首页或分类页的html源码
2。依据分析,写出正则表达式,采集首页或分类页面里的链接
3。将链接作为目标页面,进行二次采集。
4.将采集的内容作进一步处理。

范例:对86mm.com.cn网站的全面采集
一,对首页源码分析,找出链接规律
该网站首页源码查看:http://86mm.com.cn/files.php?id=http://86mm.com.cn
分析有效链接:

CODE:

<TR><TD><a href="html/xingaijiankang/8104.html" target="_blank" title="男性生殖保健">
男性生殖保健</a></TD></TR>
现在我们就要找出形如"html/xingaijiankang/8104.html"类似字符串的所有链接。

范例:对86mm.com.cn网站的全面采集
二,写正则表达式,找出首页里的所有链接
关键字符串:|<a href="html/xingaijiankang/8104.html" target="_blank"|
正则匹配规则:
$re="|<a href=/"(html///w+///d{1,5}/.html)/" target=/"_blank/"|U";
找所有链接,并显示结果:
[php] view plain copy
 
  1. <?php  
  2. // ####################### 获取文件里的html链接 #######################  
  3. function geturl($re,$ufile,$rep1,$rep2){  
  4. preg_match_all ($re,  
  5.     $ufile,  
  6.     $out, PREG_PATTERN_ORDER);  
  7. $result=count($out[1]);  
  8. $i=0;  
  9. while($i<$result)  
  10. {  
  11. $outs[$i]=str_replace($rep1,$rep2,$out[1][$i]);  
  12. $i++;  
  13. }  
  14. //合并相同的链接并重新索引...  
  15. $reout=array();  
  16. $reout=resetar($outs);  
  17. return $reout;  
  18. }  
  19. set_time_limit(0);  
  20.   
  21. $url=$_GET[\'http://86mm.com.cn\'];  
  22. $ufile=file_get_contents($url);  
  23. $re="|<a href=/"(html///w+///d{1,5}/.html)/" target=/"_blank/"|U";  
  24. $rep1="";  
  25. $rep2="";  
  26.   
  27. $urls=geturl($re,$ufile,$rep1,$rep2);  
  28. $result=count($urls);  
  29.   
  30. echo "共找到".$result."个链接<br>";  
  31. $i=0;  
  32. while($i<$result)  
  33. {  
  34.   
  35. $outurl[$i]="http://86mm.com.cn/".$urls[$i];  
  36. echo $outurl[$i]."<br>";  
  37. $i++;  
  38. }  
  39. ?>  


3.JPG

3.JPG


三,对内容页面html源码分析,采集标题和内容(本范例主要采集页面标题和内容)
查看源码:http://86mm.com.cn/files.php?id= ... einvzipai/8061.html
分析:

CODE:

<TITLE>世界上最搞笑的屁股⌒-mianfeidianying,中国美女网,xingai(拼音),免费,短片,视频,恶搞,搞笑图片</TITLE>这部分可以用cut("<TITLE>","</TITLE>",$file)直接获取,然后把后面多余的尾巴换掉。
主要内容部分集中在

CODE:

<td height="15" valign="top">..............<!--流量交换-->这一区间内,我们可以再次cut()一下,取得内容。
这样标题我内容就全获取了。。

具体实现代码:

 

[php] view plain copy
 
  1. <?php  
  2. // ####################### 切分文件流 #######################  
  3. function cut($start,$end,$file){  
  4.         $content=explode($start,$file);   
  5.         $content=explode($end,$content[1]);   
  6.         return  $content[0];   
  7. }  
  8. // ####################### 清除垃圾代码 #######################  
  9. function del($start,$end,$content){  
  10.        $del=cut($start,$end,$content);  
  11.        $content=str_replace($del,"",$content);  
  12.        $content=str_replace($start.$end,"",$content);  
  13.        return $content;  
  14.         
  15.        
  16. }  
  17. set_time_limit(0);  
  18.   
  19. $url=$_GET[\'id\'];  
  20. $files=file_get_contents($url);  
  21. $title=cut("<TITLE>","</TITLE>",$files);  
  22. //清除标题后面的多余字符串  
  23. $title=str_replace("-mianfeidianying,中国美女网,xingai(拼音),免费,短片,视频,恶搞,搞笑图片","",$title);  
  24. $content=cut("<td height=/"15/" valign=/"top/">","<!--流量交换-->"  
  25. ,$files);  
  26. //清除内容里的一句广告词  
  27. $content=del("<font color=red>","</font>",$content);  
  28.   
  29. echo $title."<br>";  
  30. echo $content;  
  31. ?>  


 

样,我们就可以获取一个页面内的标题和内容了。。


4.GIF

4.GIF


四,批量获取首页里所有链接的标题和内容,并以php文件的形式保存。
  下面,我们要用程序依次打开86mm.com.cn首页里所有链接,并取得相应的标题和内容,存为php文件,当然你可以生成其它格式的文件或放进数据库里,这以个人需要而定。
代码如下:
[php] view plain copy
 
  1. <?php  
  2. // ####################### 获取文件里的html链接 #######################  
  3. function geturl($re,$ufile,$rep1,$rep2){  
  4. preg_match_all ($re,  
  5.     $ufile,  
  6.     $out, PREG_PATTERN_ORDER);  
  7. $result=count($out[1]);  
  8. $i=0;  
  9. while($i<$result)  
  10. {  
  11. $outs[$i]=str_replace($rep1,$rep2,$out[1][$i]);  
  12. $i++;  
  13. }  
  14. //合并相同的链接并重新索引...  
  15. $reout=array();  
  16. $reout=resetar($outs);  
  17. return $reout;  
  18. }  
  19. // ####################### 切分文件流 #######################  
  20. function cut($start,$end,$file){  
  21.         $content=explode($start,$file);   
  22.         $content=explode($end,$content[1]);   
  23.         return  $content[0];   
  24. }  
  25. // ####################### 清除垃圾代码 #######################  
  26. function del($start,$end,$content){  
  27.        $del=cut($start,$end,$content);  
  28.        $content=str_replace($del,"",$content);  
  29.        $content=str_replace($start.$end,"",$content);  
  30.        return $content;  
  31.         
  32.        
  33. }  
  34. // ####################### 清除数组里的重复值并重新索引数组 #######################  
  35. function resetar($outs){  
  36. $reout=array();  
  37. $reouts=array();  
  38. $reout=array_unique($outs);  
  39. foreach($reout as $key=>$value){  
  40. array_push($reouts,$value);  
  41. }  
  42. return $reouts;  
  43. }  
  44. // ####################### 写入缓存文件 #######################  
  45. function writetocache($cachedir,$cachename, $cachedata = \'\') {  
  46.     $cachedir = \'./\'.$cachedir.\'/\';  
  47.     $cachefile = $cachedir.$cachename.\'.php\';  
  48.     if(!is_dir($cachedir)) {  
  49.                         @mkdir($cachedir, 0777);  
  50.           }  
  51.     if(!is_dir($cachedir)) {  
  52.       @mkdir($cachedir, 0777);  
  53.     }  
  54.     if(@$fp = fopen($cachefile, \'wb\')) {  
  55.       @fwrite($fp, "<?php/r/n//天涯风云,版权所有/r/n//Created on /r/n/r/n".$cachedata."/r/n/r/n?>");  
  56.       @fclose($fp);  
  57.       @chmod($cachefile, 0777);  
  58.     } else {  
  59.       echo \'Can not write to cache files, please check directory ./cache/ .\';  
  60.       exit;  
  61.     }  
  62. }  
  63. // ####################### 创建缓存文件 #######################  
  64. function content_recache($cachedir,$i,$title,$content) {  
  65.     
  66.   $contents = "/$catecache = array(/r/n";  
  67.     $contents.="/t\'title\' => \'".$title."\',/r/n\'content\'=> \'".$content."\'/r/n";  
  68.   $contents .= ");";  
  69.   writetocache($cachedir,$i,$contents);  
  70. echo "./".$cachedir."/".$i.".php文件创建成功!<br>";  
  71. }  
  72. set_time_limit(0);  
  73.   
  74. $url=\'http://86mm.com.cn\';  
  75. $ufile=file_get_contents($url);  
  76. $re="|<a href=/"(html///w+///d{1,5}/.html)/" target=/"_blank/"|U";  
  77. $rep1="";  
  78. $rep2="";  
  79.   
  80. $urls=geturl($re,$ufile,$rep1,$rep2);  
  81. $result=count($urls);  
  82.   
  83. echo "共找到".$result."个链接<br>";  
  84. $i=0;  
  85. while($i<$result)  
  86. {  
  87.   
  88. $outurl[$i]="http://86mm.com.cn/".$urls[$i];//对取得的链接加域名,得到实际地址  
  89. echo $outurl[$i]."<br>";  
  90. $files[$i]=file_get_contents($outurl[$i]);  
  91. $title[$i]=cut("<TITLE>","</TITLE>",$files[$i]);  
  92. $title[$i]=str_replace("-mianfeidianying,中国美女网,xingai(拼音),免费,短片,视频,恶搞,搞笑图片","",$title[$i]);  
  93. $content[$i]=cut("<td height=/"15/" valign=/"top/">","<!--流量交换-->"  
  94. ,$files[$i]);  
  95. //清除内容里的一句广告词  
  96. $content[i]=del("<font color=red>","</font>",$content[i]);  
  97.   
  98. //将取得的标题和内容写入文件  
  99. content_recache("86mm",$i,$title[$i],$content[$i]);  
  100. $i++;  
  101. }  
  102.   
  103. ?>  


例中,将取得的标题和内容存为php数组形式的文件,主要为了文件做后期处理,或写入数据库,或生成html文档都可以

http://blog.csdn.net/larance001/article/details/6858805