熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

php正則匹配獲取指定url網頁頁面超級鏈接地址

2013-11-15 12:35:18  來源: PHP編程 

  在數據采集與頁面分析中常需要抓取給定url頁面的內容或者第二第三層次深度頁面內容

  這裡是一個測試例子的實現僅供參考

  代碼如下

  
/*
匹配給定頁面鏈接
return:array match[linkcontentall]
*/
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*(["])?(?()(*?)|([^s>]+))[^>]*>?(*?)</a>isx"$document$links);
 while(list($key$val) = each($links[])) {
  if(!empty($val))
   if(preg_match("/http/"$val)){
    $match[link][] = $val;
   }
   else {
    $match[link][] = $host $val;
   }
 }
 while(list($key$val) = each($links[])) {
  if(!empty($val))
   if(preg_match("/http/"$val)){
    $match[link][] = $val;
   }
   else {
    $match[link][] = $host $val;
   }
 }
 while(list($key$val) = each($links[])) {
  if(!empty($val))
   $match[content][] = $val;
 }
 while(list($key$val) = each($links[])) {
  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" $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{e}x{fff}]+/u $str $matches);
 $str = join( $matches[]);
 if(!$str)
  return NULL;
 
 return $str;
}

  function get_content($url$depth) {
 if(!$url || $depth < )
  return false;

  while($depth > ){
  $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;
}


From:http://tw.wingwit.com/Article/program/PHP/201311/21224.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.