一个数据采集类


Posted in PHP onFebruary 14, 2007
<? 
// 兼容 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=\"查看效果\">  <INPUT name=Button onclick=asdf.select() type=button value=\"全选\">  <INPUT name=Button onclick=\"asdf.value=''\" type=button value=\"清空\">  <INPUT onclick=saveFile(); type=button value=\"保存代码\"></center>"; 
        echo $tempstr; 
    } 

} 
?>
PHP 相关文章推荐
用PHP实现小型站点广告管理(修正版)
Oct 09 PHP
PHP 内存缓存加速功能memcached安装与用法
Sep 03 PHP
php采集时被封ip的解决方法
Aug 29 PHP
php include和require的区别深入解析
Jun 17 PHP
PHP内核探索:变量存储与类型使用说明
Jan 30 PHP
ThinkPHP CURD方法之where方法详解
Jun 18 PHP
php启用sphinx全文搜索的实现方法
Dec 24 PHP
PHP提高编程效率的20个要点
Sep 23 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
Apr 20 PHP
yii2 上传图片的示例代码
Nov 02 PHP
PHP序列化的四种实现方法与横向对比
Nov 29 PHP
PHP代码覆盖率统计详解
Jul 22 PHP
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
Feb 11 #PHP
增加反向链接的101个方法 站长推荐
Jan 31 #PHP
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
Jan 29 #PHP
解决控件遮挡问题:关于有窗口元素和无窗口元素
Jan 28 #PHP
获得Google PR值的PHP代码
Jan 28 #PHP
一键删除顽固的空文件夹 软件下载
Jan 26 #PHP
php中通过smtp发邮件的类,测试通过
Jan 22 #PHP
You might like
非常不错的MySQL优化的8条经验
2008/03/24 PHP
php获取url字符串截取路径的文件名和扩展名的函数
2010/01/22 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
PHP simplexml_load_file()函数讲解
2019/02/03 PHP
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
Javascript拓展String方法小结
2013/07/08 Javascript
网页中可关闭的漂浮窗口实现可自行调节
2013/08/20 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
JS实现生成会变大变小的圆环实例
2015/08/05 Javascript
Js+Ajax,Get和Post在使用上的区别小结
2016/06/08 Javascript
JavaScript必知必会(十) call apply bind的用法说明
2016/06/08 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
jQuery滚动监听实现商城楼梯式导航效果
2017/03/06 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
element el-table表格的二次封装实现(附表格高度自适应)
2021/01/19 Javascript
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
Python中的匿名函数使用简介
2015/04/27 Python
Python实现按学生年龄排序的实际问题详解
2017/08/29 Python
Python机器学习之决策树算法实例详解
2017/12/06 Python
python2.7实现FTP文件下载功能
2018/04/15 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
python实现人机五子棋
2020/03/25 Python
python实现画图工具
2020/08/27 Python
Python try except finally资源回收的实现
2021/01/25 Python
纯CSS3实现的井字棋游戏
2020/11/25 HTML / CSS
Under Armour安德玛荷兰官网:美国高端运动科技品牌
2019/07/10 全球购物
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
新教师工作感言
2014/02/16 职场文书
个人剖析材料范文
2014/09/30 职场文书
精神病医院见习报告
2014/11/03 职场文书
未婚证明格式
2015/06/15 职场文书
开网店计划分析
2019/07/30 职场文书
关于golang高并发的实现与注意事项说明
2021/05/08 Golang