Heim  >  Artikel  >  Backend-Entwicklung  >  php的百度关键字排名查询函数,第二页的站点无返回值

php的百度关键字排名查询函数,第二页的站点无返回值

WBOY
WBOYOriginal
2016-06-23 14:09:231519Durchsuche

第一页的关键词都返回正常结果,第二页的收不到值,不知道怎么回事,代码如下

<?phpfunction 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>';?>


回复讨论(解决方案)

这个问题很复杂么?

不知道返回数据的含义
也不知道第二页该是什么

你也没有示例第二页的操作

不知道返回数据的含义
也不知道第二页该是什么

你也没有示例第二页的操作

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

//print_r($arr_rank);             return array($px,$page,++$k);//$px排名,$page为所在页数,++$k为关键词所在页数的具体位置 


其实奇怪就奇怪在这个地方,print_r()的时候还有值呢,return的时候就成空了

来个明白人给瞅瞅吧

你有递归,为何不返回递归数据呢?
    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
)

谢谢了,看来我还是不懂算法啊

你有递归,为何不返回递归数据呢?
    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
)

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn