当前位置:首页> PHP教程> PHP代码
关键字
文章内容
一个数据采集类
 
 
修改时间:[2009/09/25 17:09]    阅读次数:[1590]    发表者:[起缘]
 
<?
// 兼容 php4 php5
// 程序作者  张建 52linux.com(我爱Linux)
// 联系方法  733905@qq.com  QQ 733905
// 简单调用方法
/*
<?
include ("ugs.php"); // 你可以下载本ugs.phps 然后重命名为ugs.php
$ugs = new ugs();
$url = "http://domainname.com/path_to_your_target?param";
$ugs->seturl($url);
$ugs->gather();
//............这里可以调用本类里的其它方法,对$ugs->value_  做调整,
以满足您的要求
$content=$ugs->getcontent();
print($content);
?>
*/
class
ugs
{
    var
$value_  ;  
//'目标内容
    
var $src_    ;  
//'目标URL地址

    
function seturl($url
)
    {
        
$this->src_=$url
;
    }
    function
getcontent
()
    {
        return
$this->value_
;
    }
    function
getfile($url
)
     
// 获取目标
    
{
        
$url_parsed = parse_url($url
);
        
$host = $url_parsed["host"
];
        
$port = $url_parsed["port"
];
        if (
$port==0)  $port = 80
;
        
$path = $url_parsed["path"
];
        if (empty(
$path
))
        
$path="/"
;
        if (
$url_parsed["query"] != ""
)
           
$path .= "?".$url_parsed["query"
];
        
$out = "GET $path HTTP/1.0\r\nHost: $host\r\n\r\n"
;
        
$fp = fsockopen($host, $port, $errno, $errstr, 30
);
        
fwrite($fp, $out
);
        
$body = false
;
        while (!
feof($fp
))
        {
          
$s = fgets($fp, 1024
);
          if (
$body )  $in .= $s
;
          if (
$s == "\r\n"
)
               
$body = true
;
        }
        
fclose($fp
);
        return
$in
;
   }

   function
getfile_curl($url
)
   {
    
$curl="/usr/local/bin/curl " ;
// path to your curl
    
$curl_options=" -s --connect-timeout 10  --max-time 10  "
;
    
// curl 用法请参考 curl --help 或者 man curl
    // curl 参数非常之丰富,可以模拟各种浏览器(agent) 可以设置referer
    
$cmd="$curl $curl_options $url "
;
    @
exec($cmd,$o,$r
);
    if(
$r!=0
)
    {
        return
"超时"
;
    }
    else
    {
        
$o=join("",$o
);
        return
$o
;
    }
   }

    function
gather_curl($curl
)
    {
        
$http=$this->getfile_curl($this->src_
);
        return
$this->value_=$http
;
    }

    function
gather_array($url
)
     {
        return
file($url
);
    }

    function   
gather
()
     
// 开始收集
    
{
        
$http=$this->getfile($this->src_
);
        return
$this->value_=$http
;
    }

    function
gather_local($toline=true
)
     
// 处理本地文件
    
{

        if(
$toline
)
        {
            
$http=file($this->src_
);
            return
$this->value_=$this->BytesToBstr($http
);
        }
        else
        {
            
$http=file($this->src_
);
            return
$this->value_=$http
;
        }
                

        
    }

    function
noReturn
()
     
// 删除回车换行
    
{
        
$this->value_=str_replace("\n","",$this->value_
);
        
$this->value_=str_replace("\r","",$this->value_
);
    }


    function
change($oldStr,$str
)
    
//'对收集到的内容中的个别字符串用新值更换/方法
    //'参数分别是旧字符串,新字符串
    
{
        
$this->value_=str_replace($oldStr,$str,$this->value_
);
    }



    function
cut($start,$end,$no='1',$comprise=''
)
    
//'按指定首尾字符串对收集的内容进行裁减(不包括首尾字符串)方法
    // $no 必须是 1,2 3 ... 不允许是0
    //$comprise 可以选择 start 或者 end 或者 all 或者 什么都不填
    
{
        
$string=explode($start,$this->value_
);
        
//print_r($string);
        
$string=explode($end,$string[$no
]);
        
//print_r($string);
        
switch ($comprise
){
                case
'start'
:
                        
$string=$start.$string[0
];
                break;
                case
'end'
:
                        
$string=$string[0].$end
;
                break;
                case
'all'
:
                        
$string=$start.$string[0].$end
;
                break;
                default:
                        
$string=$string[0
];
        }
        return
$this->value_=$string
;
        }


    function  
filt($head,$bot,$str,$no='1',$comprise=''
)
    
//'按指定首尾字符串对收集的内容用新值进行替换(不包括首尾字符串)方法
    // '参数分别是首字符串,尾字符串,新值,新值位空则为过滤
    
{
        
$tmp_v=$this->value_
;
        
$tmp=$this->cut($head,$bot,$no,$comprise
);
        return
$this->value_=str_replace($tmp,$str,$tmp_v
);
    }



    function  
local
()
    {
        
//'将收集的内容中的绝对URL地址改为本地相对地址
        // 还没实现
    
}



    function  
replaceByReg($patrn,$str
)
     
//'对收集的内容中的符合正则表达式的字符串用新值进行替换/方法
     //'参数是你自定义的正则表达式,新值
    
{
        return
$this->value_=join("",preg_replace($patrn,$str,$this->value_
));
    }



    function
debug
()
    
//调试显示
    
{
        
$tempstr="<SCRIPT>function runEx(){var winEx2 = window.open(\"\", \"winEx2\", \"width=500,height=300,status=yes,menubar=no,scrollbars=yes,resizable=yes\"); winEx2.document.open(\"text/html\", \"replace\"); winEx2.document.write(unescape(event.srcElement.parentElement.children[0].value)); winEx2.document.close(); }function saveFile(){var win=window.open('','','top=10000,left=10000');win.document.write(document.all.asdf.innerText);win.document.execCommand('SaveAs','','javascript.htm');win.close();}</SCRIPT><center><TEXTAREA id=asdf name=textfield rows=32  wrap=VIRTUAL cols=\"120\">".$this->value_."</TEXTAREA><BR><BR><INPUT name=Button onclick=runEx() type=button value=\"查看效果\">&nbsp;&nbsp;<INPUT name=Button onclick=asdf.select() type=button value=\"全选\">&nbsp;&nbsp;<INPUT name=Button onclick=\"asdf.value=''\" type=button value=\"清空\">&nbsp;&nbsp;<INPUT onclick=saveFile(); type=button value=\"保存代码\"></center>"
;
        echo
$tempstr
;
    }


}
?>