用户输入一批关键词,点击查询,程序自动模拟浏览器访问百度搜索结果页,解析出指定网站的排名,最后以表格形式展示结果。

关键字百度排名批量查询(php网页版)
(图片来源网络,侵删)

⚠️ 重要声明(必读)

在开始之前,请务必了解以下几点:

  1. 反爬虫机制:百度有非常强大的反爬虫系统。直接、高频、大量地用脚本请求百度,你的服务器 IP 很快会被封禁,导致无法访问,本教程提供的代码主要用于学习和个人少量使用,不适用于商业高频、大批量的查询
  2. 模拟浏览器:为了降低被封禁的风险,代码中会使用 cURL 来模拟真实浏览器(如 Chrome)的访问行为,包括设置 User-AgentReferer 等请求头。
  3. 结果准确性:百度搜索结果会根据用户的地理位置、浏览历史、登录状态等因素而变化,你通过脚本查询到的排名,可能与你在浏览器中手动搜索看到的排名不完全一致。
  4. 法律与道德:请遵守百度的《Robots协议》和服务条款,不要对百度服务器造成过大压力。

功能设计

  1. 前端界面

    • 一个文本域,用于批量输入关键词(每行一个)。
    • 一个输入框,用于输入需要查询排名的目标域名(www.example.com)。
    • 一个“开始查询”按钮。
    • 一个表格,用于展示查询结果(关键词、排名、是否在首页、链接)。
  2. 后端逻辑 (PHP)

    • 接收前端提交的关键词列表和目标域名。
    • 循环遍历每个关键词。
    • 对每个关键词,构造百度搜索 URL。
    • 使用 cURL 发送 HTTP 请求,获取搜索结果页的 HTML 内容。
    • 使用 PHP DOMDocument正则表达式 解析 HTML,找到目标域名的排名。
    • 将结果存入数组。
    • 循环结束后,将结果数组渲染成 HTML 表格返回给前端。

项目文件结构

为了清晰,我们创建一个简单的项目结构:

关键字百度排名批量查询(php网页版)
(图片来源网络,侵删)
baidu-rank-checker/
├── index.php         # 主页面,包含表单和结果展示
└── style.css         # 简单的样式文件

第1步:前端页面 (index.php)

这个文件将包含 HTML 表单和用于显示结果的 PHP 代码逻辑。

<?php
// ===================================================================
// 核心查询逻辑
// ===================================================================
/**
 * 查询单个关键词在百度的排名
 *
 * @param string $keyword 要查询的关键词
 * @param string $targetDomain 要查询的目标域名
 * @param int $maxPages 要查询的最大页数(每页10条结果)
 * @return array 找到的排名信息,格式为 ['rank' => 排名, 'url' => '页面链接', 'on_first_page' => true/false]
 */
function checkBaiduRank($keyword, $targetDomain, $maxPages = 5) {
    $rank = -1; // -1 表示未找到
    $url = '';
    $onFirstPage = false;
    // 循环查询多页,直到找到结果或达到最大页数
    for ($page = 0; $page < $maxPages; $page++) {
        // 计算起始条目数 (百度每页10条)
        $start = $page * 10;
        // 构造百度搜索URL (注意:这里使用的是移动版URL,结构更简单稳定)
        // 如果PC版URL结构稳定,也可以使用 PC版: 'https://www.baidu.com/s?wd=' . urlencode($keyword) . '&pn=' . $start;
        $searchUrl = 'https://m.baidu.com/s?word=' . urlencode($keyword) . '&pn=' . $start;
        // 初始化 cURL
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $searchUrl);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 返回内容不直接输出
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); // 连接超时10秒
        curl_setopt($ch, CURLOPT_TIMEOUT, 15);        // 总执行超时15秒
        // 模拟浏览器行为,降低被识别为爬虫的风险
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36');
        curl_setopt($ch, CURLOPT_REFERER, 'https://www.baidu.com/'); // 设置 referer
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 如果遇到SSL问题可以临时关闭
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        $html = curl_exec($ch);
        // 检查是否有错误
        if (curl_errno($ch)) {
            // 可以记录错误日志
            // error_log('cURL Error: ' . curl_error($ch));
            curl_close($ch);
            return ['rank' => -2, 'url' => '', 'on_first_page' => false]; // -2 表示请求失败
        }
        curl_close($ch);
        // 如果页面内容为空,则停止查询
        if (empty($html)) {
            break;
        }
        // 使用正则表达式解析排名
        // 移动版百度结果链接的格式通常是 <div class="result c-container "><h3><a href="...">标题</a></h3>...
        // 我们需要匹配 href 属性
        $pattern = '/<a\s[^>]*href="([^"]*)"[^>]*>.*?' . preg_quote($targetDomain, '/') . '.*?<\/a>/i';
        if (preg_match_all($pattern, $html, $matches, PREG_SET_ORDER)) {
            // $matches[0][1] 是第一个匹配到的URL
            $url = $matches[0][1];
            $rank = $start + 1; // 排名是起始条目数 + 1
            $onFirstPage = ($page === 0);
            break; // 找到后立即退出循环
        }
    }
    return ['rank' => $rank, 'url' => $url, 'on_first_page' => $onFirstPage];
}
// ===================================================================
// 处理表单提交
// ===================================================================
$results = [];
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['keywords']) && !empty($_POST['domain'])) {
    $keywords = array_filter(array_map('trim', explode("\n", $_POST['keywords'])));
    $targetDomain = trim($_POST['domain']);
    $totalKeywords = count($keywords);
    foreach ($keywords as $index => $keyword) {
        if (empty($keyword)) continue;
        // 显示进度 (可选,对于大量关键词有用)
        echo "<script>console.log('正在查询 (" . ($index + 1) . "/" . $totalKeywords . "): " . addslashes($keyword) . "');</script>";
        flush(); // 立即输出缓冲区内容
        $results[] = [
            'keyword' => $keyword,
            'rank_info' => checkBaiduRank($keyword, $targetDomain)
        ];
        // 添加一个小的延迟,避免请求过于频繁
        usleep(500000); // 暂停0.5秒
    }
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">百度关键词排名批量查询工具</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="container">
        <h1>百度关键词排名批量查询</h1>
        <p class="notice">⚠️ 本工具仅供学习和个人少量使用,请勿高频或批量查询,以免导致IP被封。</p>
        <form action="index.php" method="POST">
            <div class="form-group">
                <label for="keywords">关键词列表 (每行一个):</label>
                <textarea id="keywords" name="keywords" rows="10" placeholder="
网站建设
seo优化
php培训
..." required></textarea>
            </div>
            <div class="form-group">
                <label for="domain">目标域名:</label>
                <input type="text" id="domain" name="domain" placeholder="www.example.com" required>
            </div>
            <button type="submit" name="submit">开始查询</button>
        </form>
        <?php if (!empty($results)): ?>
            <div class="results-section">
                <h2>查询结果</h2>
                <table>
                    <thead>
                        <tr>
                            <
关键字百度排名批量查询(php网页版)
(图片来源网络,侵删)