正则抓取天涯数据,递归失败,求解。。。。 本帖最后由 liuser_cn 于 2013-08-12 21:25:48 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 foreach($matches['0'] as $k=>$v){ $matches[$k] = 'http://bbs.tianya.cn'.$v;}循环中修改数组的意义是什么呢?你的递归部分的代码也贴出来 1:补全,抓取到的地址没有域名。2:递归我那个注释之前是这样写的,for($i=0;$i<100;$i++){ $this->getAllPage($nextPageUrl) } for($i=0;$i<100;$i++){ $this->getAllPage($nextPageUrl)}这么做并不是递归抓取100次。而是循环了一百次,每次都在执行一个递归函数,而你的递归函数是没有出口的(没有跳出递归的出口,会导致无限递归),当然会死了。 对你的需求,可以这么做:public function getAllPage($url,$depth,&$result)$depth控制递归的深度,初始为0。 引用型的$result 记录最终的匹配到的结果。递归的跳出部分:if($depth == 100){ return;}递归函数的递归部分: $nextPageUrl = "http://bbs.tianya.cn".$nextPage['1']; foreach($matches['0'] as $k=>$v){ $result[] = 'http://bbs.tianya.cn'.$v; } getAllPage($nextPageUrl,$depth+1,$result);递归函数初始调用:$result = array();getAllPage($url,0,$result); 出口就是判断么?还真不是。你即使去掉循环,只用getAllPage(...)那一部分,也会死的。 北京电子商务公司【趣玩网】热招研发主管,符合条件6k起 mysql_errno()的问题 php上传,linux里不行 使用PDO获取多个结果集似乎有问题!?nextRowset() fetchAll() php static 怎么调用另一个文件中的类 通过页面中select下拉菜单的改变来改变本页中iframe中的table中数据的改变 为什么我的随机数,只能刷新一次呢?晕了,急问 奋战了四天,终于把学院的网站搞好了,高兴,请大家近来PP!!! 不好意思,需要北京的朋友帮忙找工作 mysql to json的问题 正则匹配<p>标签
$matches[$k] = 'http://bbs.tianya.cn'.$v;
}循环中修改数组的意义是什么呢?
你的递归部分的代码也贴出来
2:递归我那个注释之前是这样写的,
for($i=0;$i<100;$i++){
$this->getAllPage($nextPageUrl)
}
$this->getAllPage($nextPageUrl)
}这么做并不是递归抓取100次。
而是循环了一百次,每次都在执行一个递归函数,而你的递归函数是没有出口的(没有跳出递归的出口,会导致无限递归),当然会死了。
public function getAllPage($url,$depth,&$result)
$depth控制递归的深度,初始为0。 引用型的$result 记录最终的匹配到的结果。递归的跳出部分:
if($depth == 100){
return;
}递归函数的递归部分:
$nextPageUrl = "http://bbs.tianya.cn".$nextPage['1'];
foreach($matches['0'] as $k=>$v){
$result[] = 'http://bbs.tianya.cn'.$v;
}
getAllPage($nextPageUrl,$depth+1,$result);
递归函数初始调用:
$result = array();
getAllPage($url,0,$result);