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>';}
?>
- php 根据给定的一个查询关键字,获取百度的相关关键字,多个页面获取,非单页的相关搜索
- PHP实现获取百度top50的搜索排行关键字
- 根据查询的关键字,实现获取百度指定页数的搜索结果的信息(网页地址,标题,摘要,并有排序的说明)
- 获取页面的META关键字
- 使用Google Geocoding API来进行关键字搜索,获取相关的地理位置信息
- 根据关键字搜索的一个存贮过程
- PHP获取获取当前页面的URL相关方法
- php根据给定日期获取给定日期本周的日期
- 4个类型转换相关的关键字
- 类似百度的搜索提示框,数据库中查询关键字
- 【网络爬虫】给关键字获取百度知道搜索数据的网络爬虫
- Jquery搜索页面的关键字
- 存储类相关的关键字
- final 关键字的相关问题
- PHP获取生成一个页面的数据库查询次数
- PHP获取生成一个页面的数据库查询次数
- PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
- 获取相关页面信息的JS记载
- 背单词的心得
- android面试——面霸经历
- 三维栅格地图构建之四:点集配准
- jdk环境变量配置
- 基因组(BWT)排序
- php 根据给定的一个查询关键字,获取百度的相关关键字,多个页面获取,非单页的相关搜索
- Oracle_rownum的使用
- php中__FILE__常量用法简介
- 关于gcc中C语言的两篇文章
- 静态链接库和动态链接库 (参考linux程序设计4th)
- 考研数一数二以及数三的区别以及所用的教材
- Screen Mask
- gridview对某一行进行上移或下移
- poj 1135 Domino Effect 用diskla求最短路