程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php正則匹配獲取指定url網頁頁面超級鏈接地址

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

編輯:關於PHP編程

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

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved