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

目录

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

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

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

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

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

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

[本帖最后由 天涯风云 于 2007-6-3 12:41 编辑]

论坛模式 推荐 收藏 分享给好友 推荐到圈子 管理

TAG:

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

CODE:

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

CODE:

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

CODE:

//Microsoft.XMLHTTP组件使用范例程序get.php
//作者:天涯风云
$url=$_GET['id'];
$xmlhttp = new COM("Microsoft.XMLHTTP") or die("无法创建Microsoft.XMLHTTP组件!");
$xmlhttp->open("GET",$url,False, "", "");
$xmlhttp->setRequestHeader("content-Type","text/html");
$xmlhttp->send();
$body=$xmlhttp->responseText;
echo $body;
?>
用法:get.php?id="目标页面"
4.使用fsockopen()函数,获取文件流
范例程序:

CODE:

function request_url($url,$method='POST') {
$url = parse_url($url); //解析url地址,取得host,path,port,query等
if (!$url) return "couldn't parse url";
if (!isset($url['port'])) { $url['port'] = ""; }
if (!isset($url['query'])) { $url['query'] = ""; }
//连接服务器
$fp = fsockopen($url['host'], $url['port'] ? $url['port'] : 80);
if (!$fp) return "不能连接".$url['host']."服务器";
//发送请求
fputs($fp, sprintf("$method %s%s%s HTTP/1.0/n", $url['path'], $url['query'] ? "?" : "", $url['query']));
fputs($fp, "Host: $url[host]/n");
fputs($fp, "Content-type: application/x-www-form-urlencoded/n");
fputs($fp, "Connection: close/n/n");
//获得请求后返回的内容
$line = fgets($fp,1024);
if (!eregi("^HTTP/1/.. 200", $line)) return;
$results = "";
while(!feof($fp)) {
$line = fgets($fp,1024);
$results .= $line;
}
fclose($fp);
return $results;
}
函数用法:
$getstr=request_url("目标页面");
//getstr是一个字符串,你可对它作进一步处理。
[ 本帖最后由 天涯风云 于 2007-6-3 12:14 编辑 ]

天涯风云 发布于2007-06-03 12:24:33
采集范例程序
采集范例程序1
获取sina网上的某个城市的天气信息
//sinatianqi.php

CODE:

/* 此程序是从新浪网的天气网页[url]http://php.weather.sina.com.cn/search.php?city=[/url]某个城市名,取得天气信息*/
ob_start();  //启动输出缓冲
function request_url($url,$method='POST') {
$url = parse_url($url); //解析url地址,取得host,path,port,query等
if (!$url) return "couldn't parse url";
if (!isset($url['port'])) { $url['port'] = ""; }
if (!isset($url['query'])) { $url['query'] = ""; }
//连接服务器
$fp = fsockopen($url['host'], $url['port'] ? $url['port'] : 80);
if (!$fp) return "不能连接".$url['host']."服务器";
//发送请求
fputs($fp, sprintf("$method %s%s%s HTTP/1.0/n", $url['path'], $url['query'] ? "?" : "", $url['query']));
fputs($fp, "Host: $url[host]/n");
fputs($fp, "Content-type: application/x-www-form-urlencoded/n");
fputs($fp, "Connection: close/n/n");
//获得请求后返回的内容
$line = fgets($fp,1024);
if (!eregi("^HTTP/1/.. 200", $line)) return;
$results = "";
while(!feof($fp)) {
$line = fgets($fp,1024);
$results .= $line;
}
fclose($fp);
return $results;
}
//获得从其它网页传送过来的url(带查询字串)
if (!$_REQUEST['url']) {
echo "请添加一个url";
exit;
}else{
$url=$_REQUEST['url'];
}
$content=request_url($url); //取得请求后的网页内容
$start=strpos($content," ");//取得天气预报的截取段
$end=strpos($content," ");
$len=$end-$start;
$b=substr($content,$start,$len); //截取得指定内容
//从上面的截取段中取得城市今日天气预报的截取段
$sub_start=strpos($b,"

");  
$sub_end=strpos($b,"
");
$len2=$sub_end-$sub_start;
$c=substr($b,$sub_start,$len2);
$d=split("/n",$c); //去掉换行符
//print_r($d);
$e="";
foreach ($d as $key=>$value){
$value=strip_tags($value);  //去掉html标记
$e.=$value;
if ($key==2) {
  $e.="
";
}
}
echo $e;
ob_end_flush();
?>  
程序运行情况:
测试
[ 本帖最后由 天涯风云 于 2007-6-3 12:26 编辑 ]

天涯风云 发布于2007-06-03 12:29:08
采集范例程序
采集范例程序
采集范例程序2:取得tom的天气

CODE:


天气预报-天气查询-中国美女网
href="images/home.css" rel=stylesheet>







         























                  background=templates/default/images/tt_r4_c1.jpg>      src="templates/default/images/tt_r5_c8.jpg" width=1>               background=templates/default/images/tt_r4_c1.jpg>      src="templates/default/images/tt_r5_c8.jpg" width=1>               background=templates/default/images/tt_r4_c1.jpg>      src="templates/default/images/tt_r5_c8.jpg" width=1>               background=templates/default/images/tt_r4_c1.jpg>      src="templates/default/images/tt_r5_c8.jpg" width=1>               background=templates/default/images/tt_r4_c1.jpg>      src="templates/default/images/tt_r5_c8.jpg" width=1>               background=templates/default/images/tt_r4_c1.jpg>      src="templates/default/images/tt_r5_c8.jpg" width=1>               background=templates/default/images/tt_r4_c1.jpg>      src="templates/default/images/tt_r5_c8.jpg" width=1>               background=templates/default/images/tt_r4_c1.jpg>      src="templates/default/images/tt_r5_c8.jpg" width=1>             background=templates/default/images/tt_r4_c1.jpg>      src="templates/default/images/tt_r5_c8.jpg" width=1>       
      href="http://www.86mm.com.cn/" target=_blank>首页      href="http://www.huazhongpc.com/html/zouguangtoupai/"
    target=_blank>走光偷拍
      href="http://www.huazhongpc.com/html/jiqingyouhuo/"
    target=_blank>激情诱惑
      href="http://www.huazhongpc.com/html/qingchunnvhai/"
    target=_blank>清纯女孩
      href="http://www.huazhongpc.com/html/meinvzipai/"
    target=_blank>美女自拍
      href="http://www.huazhongpc.com/html/mingxingxiezhen/"
    target=_blank>明星写真
      href="http://www.huazhongpc.com/html/xingaijiankang/"
    target=_blank>性爱健康
      href="http://www.huazhongpc.com/html/mianfeidianying/" target=_blank>免费电影      href="http://www.huazhongpc.com/html/gaoxiaotupian/" target=_blank>搞笑图片      href="http://www.huazhongpc.com/tianqi.php" target=_blank>天气预报

background=images/t2_05.gif border=0>
 
 

(友情提醒:按"Ctrl键+F"查找你所在城市的天气情况)
                      
                         
                     
   

background=images/t2_05.gif border=0>
 
 
   
    中国天气查询
   
   
数据来源:      href="http://www.tq121.com.cn/"
      target=_blank>中央气象台
      width=7>








  $str = file("http://tq.tom.com/china/index.html"); $count = count($str); for ($i=0;$i<$count;$i++){     $file .= $str[$i]; } $tomtq = explode("

",$file); $tomtq = explode("
",$tomtq[1]);
$tomtq= $tomtq[0];
echo $tomtq;
?>
 
 


       

     














鄂ICP备06012810号


                                                                align=middle>本站内容来自于互联网搜索和网友改编、上传,本站提供的视频、音乐片断仅供网友测试使用,如发现相关内容侵犯了您的权益,请及时联系我们,本站将会及时予以删除           联系QQ:231734624             联系E-mail:[email protected]             Copyright ? 2005-2008 86mm.com.cn Inc. All             rights reserved. 华中美女网 版权所有                    
            target=_blank>联系我们 -              onclick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.86mm.com.cn');return false;"
            href="http://www.86mm.com.cn/#">设置首页 -
                        target=_blank>广告服务 -             color=#ff0000>            target=_blank>友情链接


示范页面:http://86mm.com.cn/tianqi.php
[ 本帖最后由 天涯风云 于 2007-6-5 19:42 编辑 ]

天涯风云 发布于2007-06-03 12:37:12
一些常用的函数

CODE:

// ####################### 获取文件流并转换成字符串 #######################
function openfile($url)
{
if(file($url)){
        $str = file($url);
        $count = count($str);
        for ($i=0;$i<$count;$i++){
        $file .= $str[$i];
                                 }
        return $file;
              } else { die("文件打开失败!"); }
}
// ####################### 切分字符串 #######################
function cut($start,$end,$file){
        $content=explode($start,$file);
        $content=explode($end,$content[1]);
        return  $content[0];
}
// ####################### 清除垃圾代码 #######################
function del($start,$end,$content){
       $del=cut($start,$end,$content);
       $content=str_replace($del,"",$content);
       $content=str_replace($start.$end,"",$content);
       return $content;
}
// ####################### 分析域名 #######################
function getname($url)
{
$referer = preg_replace("/https?:////([^//]+).*/i", "//1", $url);
$referer = str_replace("www.", "", $referer);
return $referer;
}
// ####################### 清除HTML代码table #######################
function clstable($content)
{
$clscontent= preg_replace("/ ]*?>.*? /si", "", $content);
return $clscontent;
}
// ####################### 清除HTML代码script #######################
function clsscript($content)
{
$clscontent= preg_replace("/ ]*?>.*? /si", "", $content);
return $clscontent;
}
// ####################### 清除HTML代码div #######################
function clsdiv($content)
{
$clscontent= preg_replace("/ ]*?>.*? /si", "", $content);
return $clscontent;
}
// ####################### 清除HTML代码iframe #######################
function clsifr($content)
{
$clscontent= preg_replace("/ ]*?>.*? /si", "", $content);
return $clscontent;
}
// ####################### 清除HTML代码tr,td #######################
function clstrtd($content)
{
$clscontent= preg_replace("/ ]*?>.*? /si", "", $content);
$clscontent= preg_replace("/ ]*?>.*? /si", "", $clscontent);
$clscontent= preg_replace("/ ]*?>/si","",$clscontent);
$clscontent= preg_replace("/ ]*?>/si","",$clscontent);
$clscontent= preg_replace("/ /si","",$clscontent);
$clscontent= preg_replace("/ /si","",$clscontent);
return $clscontent;
}
// ####################### 清除HTML代码超链接 #######################
function clsa($content)
{
$clscontent= preg_replace("/ ]*?>.*? /si", "", $content);
return $clscontent;
}
// ####################### 彻底清除所有HTML代码#######################
function clearhtml($content)
{
$search = array ("' ]*?>.*?'si",  // 去掉 javascript
                 "'<[///!]*?[^<>]*?>'si",           // 去掉 HTML 标记
                 "'([/r/n])[/s]+'",                 // 去掉空白字符
                 "'&(quot|#34);'i",                 // 替换 HTML 实体
                 "'&(amp|#38);'i",
                 "'&(lt|#60);'i",
                 "'&(gt|#62);'i",
                 "'&(nbsp|#160);'i",
                 "'&(iexcl|#161);'i",
                 "'&(cent|#162);'i",
                 "'&(pound|#163);'i",
                 "'&(copy|#169);'i",
                 "'&#(/d+);'e");                    // 作为 PHP 代码运行
$replace = array ("",
                  "",
                  "//1",
                  "/"",
                  "&",
                  "<",
                  ">",
                  " ",
                  chr(161),
                  chr(162),
                  chr(163),
                  chr(169),
                  "chr(//1)");
$text = preg_replace ($search, $replace, $content);
return $text;
}
// ####################### 写入缓存文件 #######################
function writetocache($cachedir,$cachename, $cachedata = '') {
    $cachedir = './'.$cachedir.'/';
    $cachefile = $cachedir.$cachename.'.php';
    if(!is_dir($cachedir)) {
                        @mkdir($cachedir, 0777);
          }
    if(!is_dir($cachedir)) {
      @mkdir($cachedir, 0777);
    }
    if(@$fp = fopen($cachefile, 'wb')) {
      @fwrite($fp, $cachedata);
      @fclose($fp);
      @chmod($cachefile, 0777);
    } else {
      echo 'Can not write to cache files, please check directory ./cache/ .';
      exit;
    }
}
// ####################### 获取文件里的html链接 #######################
function geturl($re,$ufile,$rep1,$rep2){
preg_match_all ($re,
    $ufile,
    $out, PREG_PATTERN_ORDER);
$result=count($out[1]);
$i=0;
while($i<$result)
{
$outs[$i]=str_replace($rep1,$rep2,$out[1][$i]);
$i++;
}
//合并相同的链接并重新索引...
$reout=array();
$reout=resetar($outs);
return $reout;
}

天涯风云 发布于2007-06-03 13:01:53
对一个目标网站的全面采集
对一个目标网站的全面采集,包括以下几个步聚:
1。分析首页或分类页的html源码
2。依据分析,写出正则表达式,采集首页或分类页面里的链接
3。将链接作为目标页面,进行二次采集。
4.将采集的内容作进一步处理。
[ 本帖最后由 天涯风云 于 2007-6-3 13:27 编辑 ]
天涯风云 发布于2007-06-03 13:28:42
范例:对86mm.com.cn网站的全面采集
范例:对86mm.com.cn网站的全面采集
一,对首页源码分析,找出链接规律
该网站首页源码查看:http://86mm.com.cn/files.php?id=http://86mm.com.cn
分析有效链接:

CODE:


男性生殖保健
现在我们就要找出形如"html/xingaijiankang/8104.html"类似字符串的所有链接。
[ 本帖最后由 天涯风云 于 2007-6-3 13:39 编辑 ]

天涯风云 发布于2007-06-03 13:37:18
范例:对86mm.com.cn网站的全面采集
二,写正则表达式,找出首页里的所有链接
关键字符串:| 正则匹配规则:
$re="| 找所有链接,并显示结果:

CODE:

// ####################### 获取文件里的html链接 #######################
function geturl($re,$ufile,$rep1,$rep2){
preg_match_all ($re,
    $ufile,
    $out, PREG_PATTERN_ORDER);
$result=count($out[1]);
$i=0;
while($i<$result)
{
$outs[$i]=str_replace($rep1,$rep2,$out[1][$i]);
$i++;
}
//合并相同的链接并重新索引...
$reout=array();
$reout=resetar($outs);
return $reout;
}
set_time_limit(0);
$url=$_GET['http://86mm.com.cn'];
$ufile=file_get_contents($url);
$re="|$rep1="";
$rep2="";
$urls=geturl($re,$ufile,$rep1,$rep2);
$result=count($urls);
echo "共找到".$result."个链接
";
$i=0;
while($i<$result)
{
$outurl[$i]="http://86mm.com.cn/".$urls[$i];
echo $outurl[$i]."
";
$i++;
}
?>
[ 本帖最后由 天涯风云 于 2007-6-3 13:49 编辑 ]

3.JPG

天涯风云 发布于2007-06-03 14:19:09
范例:对86mm.com.cn网站的全面采集
三,对内容页面html源码分析,采集标题和内容(本范例主要采集页面标题和内容)
查看源码:http://86mm.com.cn/files.php?id= ... einvzipai/8061.html
分析:

CODE:

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

CODE:

.............. 这一区间内,我们可以再次cut()一下,取得内容。
这样标题我内容就全获取了。。
具体实现代码:

CODE:

// ####################### 切分文件流 #######################
function cut($start,$end,$file){
        $content=explode($start,$file);
        $content=explode($end,$content[1]);
        return  $content[0];
}
// ####################### 清除垃圾代码 #######################
function del($start,$end,$content){
       $del=cut($start,$end,$content);
       $content=str_replace($del,"",$content);
       $content=str_replace($start.$end,"",$content);
       return $content;
}
set_time_limit(0);
$url=$_GET['id'];
$files=file_get_contents($url);
$title=cut("","",$files);
//清除标题后面的多余字符串
$title=str_replace("-mianfeidianying,中国美女网,性爱,免费,短片,视频,恶搞,搞笑图片","",$title);
$content=cut(""," "
,$files);
//清除内容里的一句广告词
$content=del("","",$content);
echo $title."
";
echo $content;
?>
这样,我们就可以获取一个页面内的标题和内容了。。
[ 本帖最后由 天涯风云 于 2007-6-3 14:29 编辑 ]

4.GIF

天涯风云 发布于2007-06-03 14:58:50
范例:对86mm.com.cn网站的全面采集
四,批量获取首页里所有链接的标题和内容,并以php文件的形式保存。
  下面,我们要用程序依次打开86mm.com.cn首页里所有链接,并取得相应的标题和内容,存为php文件,当然你可以生成其它格式的文件或放进数据库里,这以个人需要而定。
代码如下:

CODE:

// ####################### 获取文件里的html链接 #######################
function geturl($re,$ufile,$rep1,$rep2){
preg_match_all ($re,
    $ufile,
    $out, PREG_PATTERN_ORDER);
$result=count($out[1]);
$i=0;
while($i<$result)
{
$outs[$i]=str_replace($rep1,$rep2,$out[1][$i]);
$i++;
}
//合并相同的链接并重新索引...
$reout=array();
$reout=resetar($outs);
return $reout;
}
// ####################### 切分文件流 #######################
function cut($start,$end,$file){
        $content=explode($start,$file);
        $content=explode($end,$content[1]);
        return  $content[0];
}
// ####################### 清除垃圾代码 #######################
function del($start,$end,$content){
       $del=cut($start,$end,$content);
       $content=str_replace($del,"",$content);
       $content=str_replace($start.$end,"",$content);
       return $content;
}
// ####################### 清除数组里的重复值并重新索引数组 #######################
function resetar($outs){
$reout=array();
$reouts=array();
$reout=array_unique($outs);
foreach($reout as $key=>$value){
array_push($reouts,$value);
}
return $reouts;
}
// ####################### 写入缓存文件 #######################
function writetocache($cachedir,$cachename, $cachedata = '') {
    $cachedir = './'.$cachedir.'/';
    $cachefile = $cachedir.$cachename.'.php';
    if(!is_dir($cachedir)) {
                        @mkdir($cachedir, 0777);
          }
    if(!is_dir($cachedir)) {
      @mkdir($cachedir, 0777);
    }
    if(@$fp = fopen($cachefile, 'wb')) {
      @fwrite($fp, " ");
      @fclose($fp);
      @chmod($cachefile, 0777);
    } else {
      echo 'Can not write to cache files, please check directory ./cache/ .';
      exit;
    }
}
// ####################### 创建缓存文件 #######################
function content_recache($cachedir,$i,$title,$content) {
  $contents = "/$catecache = array(/r/n";
    $contents.="/t'title' => '".$title."',/r/n'content'=> '".$content."'/r/n";
  $contents .= ");";
  writetocache($cachedir,$i,$contents);
echo "./".$cachedir."/".$i.".php文件创建成功!
";
}
set_time_limit(0);
$url='http://86mm.com.cn';
$ufile=file_get_contents($url);
$re="|$rep1="";
$rep2="";
$urls=geturl($re,$ufile,$rep1,$rep2);
$result=count($urls);
echo "共找到".$result."个链接
";
$i=0;
while($i<$result)
{
$outurl[$i]="http://86mm.com.cn/".$urls[$i];//对取得的链接加域名,得到实际地址
echo $outurl[$i]."
";
$files[$i]=file_get_contents($outurl[$i]);
$title[$i]=cut("","",$files[$i]);
$title[$i]=str_replace("-mianfeidianying,中国美女网,性爱,免费,短片,视频,恶搞,搞笑图片","",$title[$i]);
$content[$i]=cut(""," "
,$files[$i]);
//清除内容里的一句广告词
$content[i]=del("","",$content[i]);
//将取得的标题和内容写入文件
content_recache("86mm",$i,$title[$i],$content[$i]);
$i++;
}
?>
示例中,将取得的标题和内容存为php数组形式的文件,主要为了文件做后期处理,或写入数据库,或生成html文档都可以

你可能感兴趣的:(html,PHP,function,File,url,FP)