可以使用PHP编写一个简单的蜘蛛访问统计系统,主要记录搜索引擎爬虫的访问信息。以下是分步实现方法:
可以使用PHP编写一个简单的蜘蛛访问统计系统,主要记录搜索引擎爬虫的访问信息。以下是分步实现方法:
一、创建爬虫识别列表(spider_list.php)
<?php
$spider_list = [
'Googlebot' => 'Google',
'Bingbot' => 'Bing',
'Slurp' => 'Yahoo',
'DuckDuckBot' => 'DuckDuckGo',
'Baiduspider' => 'Baidu',
'YandexBot' => 'Yandex'
];
?>
二、核心统计脚本(spider_logger.php)
<?php
// 引入爬虫列表
require_once 'spider_list.php';
// 获取访问信息
$user_agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
$request_url = $_SERVER['REQUEST_URI'] ?? '';
$ip_address = $_SERVER['REMOTE_ADDR'] ?? '';
$access_time = date('Y-m-d H:i:s');
// 识别爬虫
$detected_spider = null;
foreach ($spider_list as $ua_key => $spider_name) {
if (stripos($user_agent, $ua_key) !== false) {
$detected_spider = $spider_name;
break;
}
}
// 如果是爬虫则记录
if ($detected_spider) {
// 使用文件存储(CSV格式)
$log_entry = sprintf(
"%s,%s,%s,%s,%s\n",
$access_time,
$detected_spider,
$ip_address,
$request_url,
$user_agent
);
file_put_contents('spider_logs.csv', $log_entry, FILE_APPEND);
// 或使用MySQL数据库(需先创建表)
/*
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'user', 'pass');
$stmt = $pdo->prepare("INSERT INTO spider_logs
(access_time, spider_name, ip, page_url, user_agent)
VALUES (?, ?, ?, ?, ?)");
$stmt->execute([$access_time, $detected_spider, $ip_address, $request_url, $user_agent]);
*/
}
?>
三、创建数据库表(如需)
CREATE TABLE spider_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
access_time DATETIME,
spider_name VARCHAR(50),
ip VARCHAR(45),
page_url VARCHAR(255),
user_agent TEXT
);
四、在网站页面中引入统计
<?php
// 在所有页面的顶部包含统计脚本
require_once 'spider_logger.php';
?>
五、查看统计结果(stats.php)
<?php
// 文件统计方式
$logs = file('spider_logs.csv');
$stats = [];
foreach ($logs as $line) {
$data = str_getcsv($line);
$spider = $data[1];
if (!isset($stats[$spider])) {
$stats[$spider] = 0;
}
$stats[$spider]++;
}
// 显示结果
echo "<h2>爬虫访问统计</h2>";
echo "<table border='1'><tr><th>搜索引擎</th><th>访问次数</th></tr>";
foreach ($stats as $spider => $count) {
echo "<tr><td>$spider</td><td>$count</td></tr>";
}
echo "</table>";
// 数据库统计方式(示例)
/*
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'user', 'pass');
$result = $pdo->query("SELECT spider_name, COUNT(*) as cnt
FROM spider_logs
GROUP BY spider_name");
while ($row = $result->fetch()) {
echo "{$row['spider_name']}: {$row['cnt']}次<br>";
}
*/
?>
六、功能扩展建议
- 数据可视化:使用Chart.js生成访问趋势图
- 时间筛选:添加日期范围查询功能
- IP分析:统计高频爬虫IP
- 自动清理:定期归档旧数据
- 实时监控:WebSocket实现实时更新
注意事项
- 文件存储需确保
spider_logs.csv
有写入权限 - 数据库版本需配置正确的PDO连接
- 高流量站点建议使用数据库+定时任务批量写入
- 真实环境中建议过滤非法字符防止注入攻击
通过这个方法,你可以快速实现一个基础版的爬虫访问统计系统。
第二部分以上蜘蛛统计代码,我想部署到帝国cms系统,请问怎么部署?
将蜘蛛访问统计代码集成到帝国CMS系统中,可以通过以下步骤实现:
一、文件部署位置规划
核心文件
在帝国CMS根目录下创建spider
目录(例如/e/spider/
),存放以下文件:/e/spider/spider_list.php # 爬虫UA列表 /e/spider/spider_logger.php # 核心统计脚本 /e/spider/stats.php # 统计查看页面
日志存储
- 文件存储方式:建议使用
/e/data/tmp/spider_logs.csv
(需确保目录有写入权限) - 数据库方式:使用帝国CMS自带的数据库配置
- 文件存储方式:建议使用
二、适配帝国CMS的修改要点
1. 修改数据库连接方式(数据库版本)
在 spider_logger.php
中替换PDO连接为帝国CMS的数据库操作:
<?php
// 替换原来的PDO连接部分为:
if ($detected_spider) {
// 引入帝国CMS数据库配置
require_once('../class/connect.php');
require_once('../class/db_sql.php');
$link = db_connect();
$empire = new mysqlquery();
$sql = $empire->query("INSERT INTO {$dbtbpre}spider_logs
(access_time, spider_name, ip, page_url, user_agent)
VALUES (
'".addslashes($access_time)."',
'".addslashes($detected_spider)."',
'".addslashes($ip_address)."',
'".addslashes($request_url)."',
'".addslashes($user_agent)."'
)");
}
?>
2. 创建数据库表
在帝国CMS的phpMyAdmin中执行:
CREATE TABLE `phome_spider_logs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`access_time` datetime DEFAULT NULL,
`spider_name` varchar(50) DEFAULT NULL,
`ip` varchar(45) DEFAULT NULL,
`page_url` varchar(255) DEFAULT NULL,
`user_agent` text,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
(表前缀 phome_
需与你的系统一致)
三、集成到帝国CMS页面
方法1:全局嵌入(推荐)
修改公共文件
编辑/e/class/connect.php
在文件末尾添加:// 引入蜘蛛统计 require_once(__DIR__.'/spider/spider_logger.php');
方法2:模板嵌入
修改模板头部
在使用的模板文件(如/template/default/html/header.temp.php
)顶部添加:<?php require_once($_SERVER['DOCUMENT_ROOT'].'/e/spider/spider_logger.php'); ?>
四、统计查看页面优化
修改 stats.php
为帝国CMS风格:
<?php
// 必须放在帝国CMS环境下运行
define('InEmpireCMS', true);
require_once('../class/connect.php');
require_once('../class/db_sql.php');
$link = db_connect();
$empire = new mysqlquery();
// 查询统计
$sql = $empire->query("
SELECT spider_name, COUNT(*) as cnt
FROM {$dbtbpre}spider_logs
GROUP BY spider_name
");
// 输出帝国CMS头部
@include('../template/default/html/header.temp.php');
?>
<div class="container">
<h3>蜘蛛访问统计</h3>
<table class="table table-striped">
<tr>
<th>搜索引擎</th>
<th>访问次数</th>
</tr>
<?php while ($r = $empire->fetch($sql)): ?>
<tr>
<td><?=$r['spider_name']?></td>
<td><?=$r['cnt']?></td>
</tr>
<?php endwhile; ?>
</table>
</div>
<?php
// 输出帝国CMS底部
@include('../template/default/html/footer.temp.php');
?>
五、安全设置建议
- 访问权限
将stats.php
重命名为隐蔽名称(如admin_spider_2023.php
) IP白名单
在文件开头添加:$allow_ips = ['127.0.0.1', '192.168.1.100']; if (!in_array($_SERVER['REMOTE_ADDR'], $allow_ips)) { exit('Access Denied'); }
六、验证是否生效
模拟蜘蛛访问测试
使用浏览器插件(如 "User-Agent Switcher")模拟Googlebot访问:User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
- 检查记录
访问你的域名/e/spider/stats.php
查看统计数据
高级优化建议
定时任务清理
在/e/spider/clean_logs.php
创建清理脚本:<?php define('InEmpireCMS', true); require_once('../class/connect.php'); // 删除30天前的记录 $empire->query("DELETE FROM {$dbtbpre}spider_logs WHERE access_time < DATE_SUB(NOW(), INTERVAL 30 DAY)");
通过cronjob每月执行:
0 0 1 * * php /path/to/e/spider/clean_logs.php
- 蜘蛛访问明细
可增加分页查询功能显示详细访问记录
通过以上步骤即可将蜘蛛统计系统无缝集成到帝国CMS中,同时保持与系统原有风格和数据库结构的一致性。
评论 (0)