加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php正则匹配收取指定url网页页面超级链接地址

发布时间:2022-07-21 09:34:19 所属栏目:PHP教程 来源:互联网
导读:在数据采集与页面分析中,常需要抓取给定url页面的内容,或者第二、第三层次深度页面内容。 这里是一个测试例子的实现,仅供参考。 代码如下: /* 匹配给定页面链接 return:array match[link,content,all] */ function match_links($host, $document) { $p
  在数据采集与页面分析中,常需要抓取给定url页面的内容,或者第二、第三层次深度页面内容。
 
  这里是一个测试例子的实现,仅供参考。
 
  代码如下:
 
  /*
  匹配给定页面链接
  return:array match[link,content,all]
  */
  function match_links($host, $document) {
   $pattern = '/<a(.*?)href="(.*?)"(.*?)>(.*?)</a>/i';
   preg_match_all($pattern, $document, $m);
   return $m;
 
   preg_match_all("'<s*as.*?hrefs*=s*(["'])?(?(1)(.*?)/1|([^s>]+))[^>]*>?(.*?)</a>'isx",$document,$links);
   while(list($key,$val) = each($links[2])) {
    if(!empty($val))
     if(preg_match("/http/",$val)){
      $match['link'][] = $val;
     }
     else {
      $match['link'][] = $host . $val;
     }
   }
   while(list($key,$val) = each($links[3])) {
    if(!empty($val))
     if(preg_match("/http/",$val)){
      $match['link'][] = $val;
     }
     else {
      $match['link'][] = $host . $val;
     }
   }
   while(list($key,$val) = each($links[4])) {
    if(!empty($val))
     $match['content'][] = $val;
   }
   while(list($key,$val) = each($links[0])) {
    if(!empty($val))
     $match['all'][] = $val;
   }
   return $match['link'];
  }
 
  /*
  从给定url中获取页面文本内容
  */
  function get_content_from_url($url) {
   $str = @file_get_contents($url);
   if(mb_check_encoding($str, "GBK"))
    $str = iconv("GBK","UTF-8", $str);
   $str = strip_tags($str); // 过滤html标签
  /*
   $str = preg_replace( "@<script(.*?)</script>@is", "", $str );
   $str = preg_replace( "@<iframe(.*?)</iframe>@is", "", $str );
   $str = preg_replace( "@<style(.*?)</style>@is", "", $str );
   $str = preg_replace( "@<(.*?)>@is", "", $str );
  */
   //过滤非汉字字符
   preg_match_all('/[x{4e00}-x{9fff}]+/u', $str, $matches);
   $str = join(',', $matches[0]);
   if(!$str)
    return NULL;
  
   return $str;
  }
 
  function get_content($url,$depth) {
   if(!$url || $depth < 1)
    return false;
 
   while($depth > 1){
    $str = @file_get_contents($url);
    if(!$str)
     return false;
 
    $parseurl = parse_url($url);
    if($parseurl['host'])
     $host = $parseurl[scheme] . "://" . $parseurl['host'];
    
    $arrlink = match_links($host,$str);
    $arr_url = array_unique($arrlink);
 
    $depth--;
    foreach($arr_url as $url){
     $content .= get_content($url, $depth); //递归调用
    }
   }
 
   $content .= get_content_from_url($url);
    
   return $content;
  }。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读