記錄百度、Google、必應等搜索引擎蜘蛛訪問網站的時間、URL、IP、User-Agent,便於分析收錄情況、發現抓取異常。
CREATE TABLE `crawler_log` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `crawler_name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '蜘蛛名稱', `visit_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '訪問時間', `request_url` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '請求URL', `client_ip` VARCHAR(45) NOT NULL DEFAULT '' COMMENT '客戶端IP', `user_agent` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '完整UA', INDEX `idx_time` (`visit_time`), INDEX `idx_crawler` (`crawler_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='爬蟲訪問日誌';
'Google',
'mediapartners-google' => 'Google Adsense',
'baiduspider' => 'Baidu',
'sogou spider' => 'Sogou',
'yahoo' => 'Yahoo',
'bingbot' => 'Bing',
'msnbot' => 'MSN/Bing',
'ia_archiver' => 'Alexa',
'yodaobot' => 'Yodao',
'iaskspider' => 'Iask',
'bytespider' => 'Toutiao/ByteDance',
'360spider' => '360',
];
foreach ($crawlerMap as $key => $name) {
if (strpos($ua, $key) !== false) {
$crawler = $name;
break;
}
}
// 非爬蟲可選擇不記錄
if ($crawler === 'Other') {
// 也可記錄所有帶 bot 的
if (strpos($ua, 'bot') === false) exit;
}
// 2. 組裝數據
$requestUrl = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$clientIp = $_SERVER['REMOTE_ADDR'] ?? '';
$visitTime = date('Y-m-d H:i:s');
// 3. 寫入數據庫 (PDO 防注入)
try {
$pdo = new PDO(
'mysql:host=localhost;dbname=your_db;charset=utf8mb4',
'db_user', 'db_pass',
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
$stmt = $pdo->prepare(
"INSERT INTO crawler_log (crawler_name, visit_time, request_url, client_ip, user_agent)
VALUES (?, ?, ?, ?, ?)"
);
$stmt->execute([$crawler, $visitTime, $requestUrl, $clientIp, $ua]);
} catch (PDOException $e) {
error_log('Crawler log failed: ' . $e->getMessage());
}
common.php、框架 bootstrap.php)頂部 require 'robot.php';access.log,避免每請求寫 DB 影響性能;query("SELECT COUNT(*) FROM crawler_log")->fetchColumn();
$pages = ceil($total / $pageSize);
$stmt = $pdo->prepare("SELECT * FROM crawler_log ORDER BY visit_time DESC LIMIT ?, ?");
$stmt->execute([$offset, $pageSize]);
$logs = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
爬蟲日誌
搜索引擎爬蟲訪問記錄 (共 = $total ?> 條)
| 時間 | 蜘蛛 | IP | URL | User-Agent |
|---|---|---|---|---|
| = htmlspecialchars($log['visit_time']) ?> | = htmlspecialchars($log['crawler_name']) ?> | = htmlspecialchars($log['client_ip']) ?> | 查看 |
crawler_log_2024_01,或使用 MySQL 原生分區;donatj/phpuseragentparser 或 ua-parser/uap-php 精準識別設備、瀏覽器、爬蟲版本。日誌中包含完整 URL 可能洩露後台路徑、參數敏感信息。展示頁面需做權限控制(僅管理員可見),並對 URL 參數進行脫敏處理。