第一页的关键词都返回正常结果,第二页的收不到值,不知道怎么回事,代码如下<?php
function search($keyword, $url, $page = 1)
{
$px = 0;
$rsState = false;

$enKeyword = urlencode($keyword);
$firstRow = ($page - 1) * 10;

if ($page > 2)
{
return array(0,0,0);
}

try{
$contents = file_get_contents("http://www.baidu.com/s?wd=$enKeyword&pn=$firstRow");
}catch (Exception $e){
echo '超时';
die();
}

preg_match_all('/<table[^>]*?class="result"[^>]*>[\s\S]*?<\/table>/i', $contents, $rs);
foreach ($rs[0] as $k => $v)
{
$px++;
$v = str_replace(array( 
'<b>', 
'</b>' 
), '', $v);//去除英文关键字的加粗标签 if (strstr($v, $url))
{
$rsState = true;
$arr_rank=array($px,$page,++$k);
//print_r($arr_rank);
return array($px,$page,++$k);//$px排名,$page为所在页数,++$k为关键词所在页数的具体位置
}
}
unset($contents);
if ($rsState === false)
{
search($keyword, $url, ++$page);
}
}
?>
<?
$keyword1="百度优化";
$site1="ppc.admin5.com";$keyword2="青岛酒店预订";
$site2="www.hotel0512.com";$keyword3="青岛酒店预订";
$site3="www.17u.com";$arr_paiming1=search($keyword1, $site1);
print_r($arr_paiming1);
echo '<br>';$arr_paiming2=search($keyword2, $site2);
print_r($arr_paiming2);
echo '<br>';$arr_paiming3=search($keyword3, $site3);
print_r($arr_paiming3);
echo '<br>';
?>
PHP

解决方案 »

  1.   


    可以看这里,http://hi.baidu.com/alexkh/item/023a90dd18ca59c51a72b415
    我只是把这个函数提出来了而已
      

  2.   


    //print_r($arr_rank);             
    return array($px,$page,++$k);//$px排名,$page为所在页数,++$k为关键词所在页数的具体位置 
    其实奇怪就奇怪在这个地方,print_r()的时候还有值呢,return的时候就成空了
      

  3.   

    你有递归,为何不返回递归数据呢?
        if ($rsState === false)
        {
            search($keyword, $url, ++$page);
        }
    至少因为应为
        if ($rsState === false)
        {
            return search($keyword, $url, ++$page);
        }结果应该是这样的吗?(search入口处打印了传入参数)
    百度优化, ppc.admin5.com, 1 
    Array
    (
        [0] => 6
        [1] => 1
        [2] => 7
    )
    青岛酒店预订, www.hotel0512.com, 1 
    青岛酒店预订, www.hotel0512.com, 2 
    Array
    (
        [0] => 4
        [1] => 2
        [2] => 5
    )
    青岛酒店预订, www.17u.com, 1 
    Array
    (
        [0] => 2
        [1] => 1
        [2] => 3
    )