欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

一个数据采集类_PHP

程序员文章站 2024-02-09 20:19:28
...
采集
// 兼容 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="


";
echo
$tempstr
;
}


}
?>