PHP版批量查询百度关键词排名源码

起因,运营的一个网站因启用百度商家号(类似百家号),绑定的为网站域名,在百度搜索结果中,默认显示商家号名称,不再显示网址,造成查询排名不方便.特意从网站查找资料,然后才有了本文的PHP版批量查询百度关键词排名源码.

其中部分参考了网上的代码,然后自己完善了一下.

主要用于查询网站关键词在百度的排名情况

默认查询前5页有无排名

可以自行在代码中修改

因每次查询百度一个页面要大概1s的时长

每个词要查5页

所以要注意查询词的数量,以避免查询时间太长.

重要的是带宽和服务器性能要好.

不然会查询很慢.

下面是全部代码

<?php
ini_set('max_execution_time','0');
if(!ini_get('safe_mode')){set_time_limit(0);}
header('Content-type: text/html; charset=utf-8');
function search($keyword,$url,$ip ='113.102.128.247',$page = 1 ){
    $res='';
    if($page > 5){
        $res .= '<tr><td>'.$keyword.'</td><td>0</td><td>5页之外</td></tr>';
        return $res;
    }else{
    $pm = ($page - 1) * 10;
    $rsState = false;
    $enKeyword = urlencode($keyword);
    $firstRow = ($page - 1) * 10;
    $urls='https://www.baidu.com/s?ie=utf-8&wd='.$enKeyword.'&pn='.$firstRow;
    $curl = curl_init();
     $dir = pathinfo($urls);//以数组的形式返回路径的信息
     $host = $dir['dirname'];//路径
     $ref = $host.'/';
    curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
    curl_setopt($curl, CURLOPT_URL, $urls); // 要访问的地址    
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
    curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:'.$ip, 'CLIENT-IP:'.$ip));//IP 
    if($ref){
      curl_setopt($curl, CURLOPT_REFERER, $ref);//带来的Referer
    }else{
    curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
    }
    curl_setopt($curl, CURLOPT_HTTPGET, 1); // 发送一个常规的Post请求
    curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
    curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
    $contents = curl_exec($curl);
    //print_r(curl_getinfo($curl));
    curl_close($curl);
    $preg='/<divs+class="f13"><as+target="_blank"s+href="[^>]+">[sS]*?</a></div>/i';
    preg_match_all($preg,$contents,$rs);
    foreach($rs[0] as $k=>$v){
        $pm++;
        if(strstr($v,$url)){
            $rsState = true;
            $res .='<tr><td><a target="_blank" href="http://www.baidu.com/s?wd='.$enKeyword.'&pn='.$firstRow.'">'.$keyword .'</a></td><td>'.$pm.'</td><td>第'. $page . '页</td></tr>';
        }
    }
    unset($contents);
    if($rsState === false){
        $res .= search($keyword, $url,$ip,++$page);
    }
    return $res;
    }
}

function getClientIp() {
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) 
        $ip = $_SERVER['HTTP_CLIENT_IP']; 
    else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) 
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    else if (!empty($_SERVER['REMOTE_ADDR'])) 
        $ip = $_SERVER['REMOTE_ADDR']; 
    else 
        $ip = 'err'; 
    return $ip; 
} 

if(isset($_REQUEST['submit'])){
    $time = explode(' ',microtime());
    $start = $time[0] + $time[1];
    $url = $_REQUEST['url'];
    //$ip = getClientIp(); 
    $res = '';
    $keywords=explode("rn", trim($_REQUEST['keyword']));
    foreach($keywords as $k=>$v){
    if(!empty($v) && $v != ' ' && $v != NULL)  $res .= search($v,$url);
    }
    $endtime = explode(' ',microtime());
    $end = $endtime[0] + $endtime[1];
    echo '<table border="1" cellspacing="0"><tr><td>关键词</td><td>排名</td><td>位置</td></tr>';
    echo $res;
    echo '</table><hr>程序运行时间: '.($end - $start);
    die();
}
?>
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>百度关键词排名查询</title>
</head>
<body>
<form action="" method="get">
<ul style="list-style:none;">
<li>
<span style="vertical-align: top;">关键字:</span><textarea name="keyword" rows="20" cols="40" wrap="hard"></textarea>
</li>
<li>
<span>url地址:</span><input type="text" name="url" size="40">
</li>
<li>
<input type="submit" name="submit" value="搜索">
</li>
</ul>
</form>
</body>
</html>

 

开源地址:

https://github.com/shadoweb/baidukeywords

 

 

“PHP版批量查询百度关键词排名源码”的2个回复

评论已关闭。