设为首页 收藏本站
查看: 351|回复: 0

[经验分享] php采集器分析功能实现

[复制链接]

尚未签到

发表于 2017-4-3 09:12:55 | 显示全部楼层 |阅读模式
php采集器分析功能实现
  a)URL地址分析
根据数据库中采集规则的定义字段,分为一页地址,多页地址,**—**页地址三种形式。

//流程控制
switch (URL地址形式)
{
     case 1:
//单页的设置
$url[0]  = URL地址;
  break;
     case 2:
//多页的设置
$manypage = explode("\n",$row->URL地址); //分割一行一个网址
$url      = $manypage;
break;
     case 3:
//XX页—XX页的设置
$rowurl    = explode('[分页]', $row->URL地址);
$a_num = 0;
for ($a=$a_num;$a<=$row->结束页;$a++)
{
$url[$a] = $rowurl[0].$a.$rowurl[1];
if ($a==0)
{
$url[$a] = $rowurl[0].$row->url_start.$rowurl[1];
}
}
}


b)内容页面链接分析

//载入URL地址页
$handles = @file_get_contents($url);
//正则表达式匹配链接规则
preg_match_all ("/".链接规则."/is",$handles,$matches);
//所得内容页面链接地址写入数据库Link表
INSERT INTO `links` (  `title` , `url` , `rules` , `date` )

c)延时函数

//参考:http://cn.php.net/manual/zh/ref.curl.php
$ch = curl_init();
$timeout = 10; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$handles = curl_exec($ch);
curl_close($ch);

d)分页分析:全部列出形式

//正则匹配分页区域
preg_match ("/".分页规则."/is",$buffer, $regs2);
//查找每个分割里面的网址 for保证网址不重复
  preg_match_all ("/".'<[^<>]*(href|value)=(\”|\’)?([^\’\”<>]*)(\”|\’)?[^<>]*>’.”/is”,$regs2[1],$regs3);
  for ($i = 0; $i <= count($regs3[3]); $i++)
{
$gethttp = $string->gethttp($regs3[3][$i]);
$buffer2 = @file_get_contents($gethttp);
//延时
  if(empty($buffer2)){
  if($phpcurl_init == “yes”){
$ch = curl_init();
$timeout = 10; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL, $regsar[$i]);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$buffer2 = curl_exec($ch);
curl_close($ch);
}
preg_match (”/”.内容规则.”/is”,$buffer2, $regss);
$cont .= $regss[1];
}

e)分页分析:上下页形式

if(preg_match ("/".分页规则."/is",$buffer, $ljregs))
{
while($ljregs[1] != "")
{
$ljregs[1] = $string->gethttp($ljregs[1]);
$buffer = @file_get_contents($ljregs[1]);
//延时
  if(empty($buffer)){
if($phpcurl_init == "yes"){
$ch = curl_init();
$timeout = 10; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL, $ljregs[1]);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$buffer = curl_exec($ch);
curl_close($ch);
  }
}
preg_match ("/".$body_rule."/is",$buffer, $regs) ;
$cont .= $regs[1];
}
}

f)Cookie部分

$string->fileFsock(url, cookie内容);
//fsockopen采集
function fileFsock($url,$cookie)
{
set_time_limit(0);
$cookie =$this->getCookie($cookie);
preg_match("/^(http:\/\/)([^\/]+)(.*)/i",  $url, $matches);
$fp = fsockopen($matches[2], 80, $errno, $errstr, 30);
if(!$fp) {
     echo "$errstr ($errno)
\n”;
} else {
     $out = “POST $matches[3] HTTP/1.1\r\n”;
     $out .= “Host:$matches[2]\r\n”;
     $out .= “Cookie: “.$cookie.”\r\n”;
     $out .= “Connection: Close\r\n\r\n”;
     fputs($fp, $out);
     fclose($fp);
}
}

g)其他相关函数:给无HOST头的网址加入HOST

function gethttp($url)
{
$url = trim($url);
if(!preg_match ('/http:\/\//i',$url,$out))
  {
if(preg_match ('/^(\.{2})\/(.+)?/i',$url,$out)) //带有目录的网址 加+网址
{
return $this->outurl[3].$out[2];//有目录的 或有/的
}
  if(preg_match ('/^(\.\/)(.+)?/i',$url,$out))//将.去掉
{
return $this->outurl[1].$out[2]; //无目录的网址 加上网址+目录
}
  if(preg_match ('/^\/(.+)/i',$url,$out)) //带有目录的网址 加+网址
{
return $this->outurl[2].$out[1];//有目录的 或有/的
}
  return $this->outurl[1].$url;
  }else{
    return $url; //有HTTP的 不需要任何操作
   }
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-359402-1-1.html 上篇帖子: PHP程序员也要学会使用“异常” 下篇帖子: PHP 实现适配器(Adapter)模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表