根据查询的关键字,实现获取百度指定页数的搜索结果的信息(网页地址,标题,摘要,并有排序的说明)

来源:互联网 发布:淘宝怎么解决管控纪录 编辑:程序博客网 时间:2024/05/01 12:14

 根据查询的关键字,实现获取百度指定页数的搜索结果的信息

(网页地址,标题,摘要,并有排序的说明)

 

例子:查询百度关键字:杨幂,获得前10页的搜索结果的 :网址

标题,url,摘要,并有排序的说明

可能存在的问题:百度搜索结果,有些推广的,新闻,可能这样

的结果会取不到,因为其格式有些不同

 

 

 

php代码录下:把代码命名为baidu.php,因为要提交表单

 

<?php
set_time_limit(0);
//jiequstr函数定义开始
function jiequstr($mubiaostr,$ksstr,$jsstr)
{if($mubiaostr==''){echo '目标字符串为空<br/>';return false;}
 
 if($ksstr==''){$jiequks=0;return false;}
else{
$chucuo1=0;
$arr1=explode('(*)',$ksstr);
$len1=count($arr1);
$chaxunwz=0;
$feikongnum1=0;
for($i=0;$i<$len1;$i++){
if($arr1[$i]=='')continue;
$feikongnum1++;
if(($wz=strpos($mubiaostr,$arr1[$i],$chaxunwz))!==false)
$chaxunwz=$wz+strlen($arr1[$i]);
else {$chucuo1=1;return false;break;}

}
if($chucuo1==1)$jiequks=0;

else $jiequks=$chaxunwz;

}

if($jsstr==''){$jiequjs=strlen($mubiaostr);return false;}

else{
$chucuo2=0;
$arr2=explode('(*)',$jsstr);
$len2=count($arr2);
$chaxunwz=$jiequks;
$feikongnum2=0;
for($i=0;$i<$len2;$i++){
if($arr2[$i]=='')continue;
$feikongnum2++;
if(($wz=strpos($mubiaostr,$arr2[$i],$chaxunwz))!==false)
 {$chaxunwz=$wz+strlen($arr2[$i]);
 if($feikongnum2==1)$enddian=$wz;
 
 }
else {$chucuo2=1;return false;break;}

}

if($chucuo2==1)$jiequjs=strlen($mubiaostr);

else $jiequjs=$enddian;

}

$jiequstr=substr($mubiaostr,$jiequks,$jiequjs-$jiequks);

//echo $jiequstr;

return $jiequstr;
}

//结束jiequstr函数定义


//循环截取函数定义开始
function canshujiequ($yuanma,$canshustr,$mubiao)
{if($yuanma=='')return array();
 $chaxunwz=0;
$canshuarr=array();
$canshuarr=explode('[参数]',$canshustr);
//echo '参数分割后的数组:';
//print_r($canshuarr);

//echo '<br/><br/>';
$len1=count($canshuarr);
$pipeiarr=array();
$tpfarr=array();
$qianks=0;
$qianjs=0;
$nowks=0;
$nowjs=0;
$end=0;
$num=0;
while(($end==0)&&($chaxunwz<strlen($yuanma))){
$mubiaofuben=$mubiao;
$feikong=0;
for($i=0;($end==0)&&($i<$len1);$i++){
if($canshuarr[$i]=='')continue;
$feikong++;
$tpfarr=explode('(*)',$canshuarr[$i]);
$len2=count($tpfarr);
$feikongnum=0;
for($j=0;($j<$len2)&&($end==0);$j++){
if($tpfarr[$j]=='')continue;
$feikongnum++;
if($chaxunwz>=strlen($yuanma)){$end=1;break;}
if(($pipeiwz=strpos($yuanma,$tpfarr[$j],$chaxunwz))!==false){
$chaxunwz=$pipeiwz+strlen($tpfarr[$j]);
if($feikongnum==1)$nowks=$pipeiwz;
$nowjs=$chaxunwz;


}
else{$end=1;break;}

 

}

if($end==0){if($feikong>1){
$str=substr($yuanma,$qianjs,$nowks-$qianjs);
$mubiaofuben=str_replace('[参数'.($feikong-1).']',$str,$mubiaofuben);
//echo '替换[参数'.($feikong-1).']<br/>';
}
$qianks=$nowks;
$qianjs=$nowjs;

}


else{//echo '没有匹配了<br/>';
break;}


}

 

if($end==0){
$pipeiarr[]=$mubiaofuben;

//echo '第'.($num+1).'条结果:'.$pipeiarr[$num].'<br/>';
$num++;
}

 


}
//echo "最后的匹配数组:";
//print_r($pipeiarr);
return $pipeiarr;

}//循环截取函数定义结束

 

//新建一个返回会话的函数

function jianli_huihua($url,$postdata='',$cookie='',$cookiefile='',$cookiejar='',$useragent='',$referer='',$followlocation=0)
{echo '开始建立与网址:'.$url.'的会话<BR>';
$huihua=curl_init($url);
curl_setopt($huihua,CURLOPT_RETURNTRANSFER,1);
curl_setopt($huihua,CURLOPT_HEADER,1);

if(!empty($postdata)){echo '使用post方式建立会话<BR>';
 curl_setopt($huihua,CURLOPT_POST,1);
}

if(!empty($cookie)){echo '设置请求的cookie:'.$cookie.'<BR>';
 curl_setopt($huihua,CURLOPT_COOKIE,$cookie);
}
elseif(!empty($cookiefile)){echo '不设置请求cookie,设置请求发送的cookie文件:'.$cookiefile.'<BR>';
 curl_setopt($huihua,CURLOPT_COOKIEFILE,$cookiefile);

}
if(!empty($cookiejar)){echo '设置返回的cookie保存文件:'.$cookiejar.'<BR>';
 curl_setopt($huihua,CURLOPT_COOKIEJAR,$cookiejar);
}
if(!empty($useragent)){echo '设置浏览器信息:'.$useragent.'<BR>';
 curl_setopt($huihua,CURLOPT_USERAGENT,$useragent);
}
if(!empty($referer)){echo '设置来源网址:'.$referer.'<BR>';
 curl_setopt($huihua,CURLOPT_REFERER,$referer);
}
if(!empty($followlocation)){echo '设置为跟纵重定向:<BR>';
 curl_setopt($huihua,CURLOPT_FOLLOWLOCATION,1);

}
echo '与网址:'.$url.'的初始化信息建立完毕<BR>';
RETURN $huihua;

}

 

//路过查询的关键字提交了,则进行获取百度10页信息:标题,摘要,url,并有些排序的说明
if(!EMPTY($_POST['tijiao'])){

if(!empty($_POST['q'])){

$tag=urlencode($_POST['q']);

}//end if(!empty($_POST['q']))

else die('查询的关键字不得为空');

if(!empty($_POST['num'])&&is_numeric($_POST['num'])&&$_POST['num']>=1)$kyyeshu=$_POST['num'];
else die('输入的页数不正确,必须大于0的整数');

//根据给定的关键字,得到关键字在百度的搜索列表网子,对列表获得记录
$xuhao=0;
ECHO '当前查询的关键字为:'.$_POST['q'].'<br>目标获取的页数:'.$_POST['num'].'<br>';

$url='http://www.baidu.com/s?wd='.$tag;
$useragent='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Sicent; WoShiHoney.B)';
$referer='http://www.baidu.com';
if(function_exists('curl_int')){
$huihua=jianli_huihua($url,'','','','',$useragent,$referer,0);
$yuanma=curl_exec($huihua);
curl_close($huihua);
}
else $yuanma=file_get_contents($url);
//判断总页数,与10比较,取最小值

if(strpos($yuanma,'<div class="nors">')!==false)$zongshu=0;

else{$zongshu=jiequstr($yuanma,'找到相关结果','个');
$zongshu=str_replace('约','',$zongshu);

$zongshu=str_replace(',','',$zongshu);
echo '找到相关结果'.$zongshu.'个<br>';
}
$yeshu=ceil($zongshu/10);
echo '总页数:'.$yeshu.'<br>';
//$kyyeshu=10;
if($yeshu<$kyyeshu)$kyyeshu=$yeshu;

echo '可用的页数:'.$kyyeshu.'<br><br><br>';

for($i=1;$i<=$kyyeshu;$i++)
{
 echo '当前处理第'.$i.'页<br>';
 $pn=($i-1)*10;
if($i>1){$url='http://www.baidu.com/s?wd='.$tag.'&pn='.$pn;
if(function_exists('curl_int')){$huihua=jianli_huihua($url,'','','','',$useragent,$referer,0);
$yuanma=curl_exec($huihua);
curl_close($huihua);}

else $yuanma=file_get_contents($url);
}
$canshustr='<h3 class="t">(*)href="[参数]"(*)>[参数]</a>(*)</h3><font size=(*)>[参数]<b';
$mubiao='[参数1]##[参数2]##[参数3]';
$arr=canshujiequ($yuanma,$canshustr,$mubiao);

//print_r($arr);

for($j=0;$j<count($arr);$j++)
{$xuhao++;
$arr1=explode('##',$arr[$j]);
$dizi=$arr1[0];
$title=$arr1[1];
$zaiyao=$arr1[2];

echo '第'.$i.'页-----第'.($j+1).'条记录---排行:'.$xuhao.'<br>标题:'.$title.'<br>网址:'.$dizi.'<br>摘要:'.$zaiyao.'<br><br>';

}

echo '处理第'.$i.'页完毕<br><br><br>';
}

}


//没有提交的时候,输出表单
else echo '<form method="post" action="baidu.php">
 请输入关键字:(路:杨幂)<input type="text" name="q"><br>获取的页数(取实际的页数和设置的页数的最小值)<input type="text" name="num"><br><input type="submit" name="tijiao" value="提交">
</form>';

 

?>


 

 

 

 

测试的效果图:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击