萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php正則匹配獲取指定url網頁頁面超級鏈接地址

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

 在數據采集與頁面分析中,常需要抓取給定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;
}

copyright © 萬盛學電腦網 all rights reserved