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

(图片来源网络,侵删)
⚠️ 重要声明(必读)
在开始之前,请务必了解以下几点:
- 反爬虫机制:百度有非常强大的反爬虫系统。直接、高频、大量地用脚本请求百度,你的服务器 IP 很快会被封禁,导致无法访问,本教程提供的代码主要用于学习和个人少量使用,不适用于商业高频、大批量的查询。
- 模拟浏览器:为了降低被封禁的风险,代码中会使用
cURL来模拟真实浏览器(如 Chrome)的访问行为,包括设置User-Agent、Referer等请求头。 - 结果准确性:百度搜索结果会根据用户的地理位置、浏览历史、登录状态等因素而变化,你通过脚本查询到的排名,可能与你在浏览器中手动搜索看到的排名不完全一致。
- 法律与道德:请遵守百度的《Robots协议》和服务条款,不要对百度服务器造成过大压力。
功能设计
-
前端界面:
- 一个文本域,用于批量输入关键词(每行一个)。
- 一个输入框,用于输入需要查询排名的目标域名(
www.example.com)。 - 一个“开始查询”按钮。
- 一个表格,用于展示查询结果(关键词、排名、是否在首页、链接)。
-
后端逻辑 (PHP):
- 接收前端提交的关键词列表和目标域名。
- 循环遍历每个关键词。
- 对每个关键词,构造百度搜索 URL。
- 使用
cURL发送 HTTP 请求,获取搜索结果页的 HTML 内容。 - 使用 PHP DOMDocument 或 正则表达式 解析 HTML,找到目标域名的排名。
- 将结果存入数组。
- 循环结束后,将结果数组渲染成 HTML 表格返回给前端。
项目文件结构
为了清晰,我们创建一个简单的项目结构:

(图片来源网络,侵删)
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>
<
(图片来源网络,侵删)
