php正则匹配获取指定url网页页面超级链接地址_PHP教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:php定时计划任务的实现方法
我在uchome 中 分析到, uchome是这样做的 1. 把所有的计划任务存放到数据库 2. 每次用户进行操作或打开页面的时候都按排序执行一条计划任务. 也就是轮番判断,时间到了的, 就在用户进程中执行. uchome的计划任务代码在 ./source/function_cron.php 上面只自己分析uchome

 在数据采集与页面分析中,常需要抓取给定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使用DES进行加密与解密的方法
代码如下: //$input - stuff to decrypt //$key - the secret key to use function do_mencrypt($input, $key) { $input = str_replace(n, , $input); $input = str_replace(t, , $input); $input = str_replace(r, , $input); $key = substr(md5($key), 0, 24); $td =

来源:模板无忧//所属分类:PHP教程/更新时间:2013-06-07
相关PHP教程