利用deepseek写一个网站蜘蛛访问统计源码
标签搜索

利用deepseek写一个网站蜘蛛访问统计源码

聚宝坊
2025-03-06 / 0 评论 / 9 阅读 / 正在检测是否收录...

可以使用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>";
}
*/
?>

六、功能扩展建议

  1. 数据可视化:使用Chart.js生成访问趋势图
  2. 时间筛选:添加日期范围查询功能
  3. IP分析:统计高频爬虫IP
  4. 自动清理:定期归档旧数据
  5. 实时监控:WebSocket实现实时更新

注意事项

  1. 文件存储需确保spider_logs.csv有写入权限
  2. 数据库版本需配置正确的PDO连接
  3. 高流量站点建议使用数据库+定时任务批量写入
  4. 真实环境中建议过滤非法字符防止注入攻击

通过这个方法,你可以快速实现一个基础版的爬虫访问统计系统。

第二部分以上蜘蛛统计代码,我想部署到帝国cms系统,请问怎么部署?

将蜘蛛访问统计代码集成到帝国CMS系统中,可以通过以下步骤实现:


一、文件部署位置规划

  1. 核心文件
    在帝国CMS根目录下创建 spider 目录(例如 /e/spider/),存放以下文件:

    /e/spider/spider_list.php    # 爬虫UA列表
    /e/spider/spider_logger.php  # 核心统计脚本
    /e/spider/stats.php          # 统计查看页面
  2. 日志存储

    • 文件存储方式:建议使用 /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:全局嵌入(推荐)

  1. 修改公共文件
    编辑 /e/class/connect.php 在文件末尾添加:

    // 引入蜘蛛统计
    require_once(__DIR__.'/spider/spider_logger.php');

方法2:模板嵌入

  1. 修改模板头部
    在使用的模板文件(如 /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');
?>

五、安全设置建议

  1. 访问权限
    stats.php 重命名为隐蔽名称(如 admin_spider_2023.php
  2. IP白名单
    在文件开头添加:

    $allow_ips = ['127.0.0.1', '192.168.1.100'];
    if (!in_array($_SERVER['REMOTE_ADDR'], $allow_ips)) {
        exit('Access Denied');
    }

六、验证是否生效

  1. 模拟蜘蛛访问测试
    使用浏览器插件(如 "User-Agent Switcher")模拟Googlebot访问:

    User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
  2. 检查记录
    访问 你的域名/e/spider/stats.php 查看统计数据

高级优化建议

  1. 定时任务清理
    /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

  2. 蜘蛛访问明细
    可增加分页查询功能显示详细访问记录

通过以上步骤即可将蜘蛛统计系统无缝集成到帝国CMS中,同时保持与系统原有风格和数据库结构的一致性。

0

评论 (0)

取消