php 根据给定的一个查询关键字,获取百度的相关关键字,多个页面获取,非单页的相关搜索

来源:互联网 发布:cad mac版破解补丁 编辑:程序博客网 时间:2024/04/29 09:35

 

整个php文件:需要命名为tag.php,因为代码里需要填写表单,提交数据

功能:通过给定一个查询关键字,路:刘亦菲,搜索其相关的关键字

获取这部分的关键字,并不是只获取 “刘亦菲” 这个关键字的,后来获得的关键字也会加入搜索,获取与他们相关的关键字,并且统计它们在搜索中出现的次数(这样能够大概知道哪些关键字搜索的更多),由于这样势必会出现热门词的量过大,所以可以限定获取的关键字最大数量,最后获取的关键字数量取实际可能的数量与限定的最小值

 

命名为tag.php,,打开tag.php,,首先要填写表单,然后提交可以看到具体的效果

 

效果图:

 

 

 

 

 

php代码:命名为tag.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;

}

//查询时
if(isset($_GET['q'])&&$_GET['q']=='开始查询')
{if(empty($_GET['tag']))die('查询 关键字不得空');
if(empty($_GET['count'])||!(is_numeric($_GET['count'])&&$_GET['count']>0))die('关键字数量控制数有误,要整数,且大于0');
//获取给定关键字的所有相关搜索关键字,以给定的初始关键字为基础
$canshustr='<th><a href="(*)">[参数]</a>';
$mubiao='[参数1]';
$tag=$_GET['tag'];
$arr1=array($tag,1);
$tagarr=array($arr1);
$count=$_GET['count'];
echo '最多获取的关键字数:'.$count.'<br>';
$stop=0;
$jishu=1;
for($i=0;($i<count($tagarr))&&(count($tagarr)<=$count);$i++)
{
//单个关键字查询获取相关关键字过程
$tag=$tagarr[$i][0];

echo '当前处理关键字:'.$tag.'<br>';
$url='http://www.baidu.com/s?wd='.urlencode($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_init'))
{  echo '开启了curl扩展,使用curl请求数据<br>';
 $huihua=jianli_huihua($url,'','','','',$useragent,$referer,0);
$yuanma=curl_exec($huihua);
curl_close($huihua);}
else{ echo '使用file_get_contents请求数据<br>';
 
 $yuanma=file_get_contents($url);
}
$arr=array();
if(strpos($yuanma,'<div id="rs">')!==false){
echo '存在与'.$tag.'相关的关键字<br>';
$arr=canshujiequ($yuanma,$canshustr,$mubiao);
}
else echo '不存在与'.$tag.'相关的关键字<br>';

//print_r($arr);

//获取到得相关关键字加入关键字数组,过滤重复,并统计每个关键字的数量
for($j=0;$j<count($arr);$j++){
$newtag=$arr[$j];
$have=0;
for($k=0;$k<count($tagarr);$k++){
$oldtag=$tagarr[$k][0];
$shu=$tagarr[$k][1];
if($newtag==$oldtag){$tagarr[$k]=array($oldtag,$shu+1);$have=1;break;}


}

if($have==0){
 if($jishu<$count)
 {echo '新增关键字:'.$newtag.'<br>';
 $xuhao=count($tagarr);
 $tagarr[$xuhao]=array($newtag,1);
 $jishu++;}
else{$stop=1;break;}

}


}

if($stop==1)break;
echo '<br><br><br>';
//最外围循环
}
echo '排序前的关键字数组:<br>';
print_r($tagarr);
echo '<br><br><br>';

//排序,按照相关关键字搜索中,出现的关键字的次数由高到低排序

for($i=0;$i<count($tagarr);$i++){
$max=$tagarr[$i][1];
//与剩余关键字比较,把最大的排到前面
for($j=$i+1;$j<count($tagarr);$j++){

if($max<$tagarr[$j][1]){
$max=$tagarr[$j][1];
$t=$tagarr[$j];
$tagarr[$j]=$tagarr[$i];

$tagarr[$i]=$t;

}

}


}
echo '排序后的关键字数组:<br>';
print_r($tagarr);


}


//没有查询输出查询表单

else{echo '<form method="get" action="tag.php">
 输入关键字:<input type="text" name="tag">(路:php)<br>输入关键字控制数量:<input type="text" name="count">(路:30,代表当超过30个关键时停止获取)<br><input type="submit" name="q" value="开始查询">
</form>';}

 

?>

 

 

 

 

原创粉丝点击