前置准备
确保你已完成以下3项基础工作,避免操作中反复跳转中断:
- 已正常运行帝国CMS7.5 UTF-8版(GBK版替换对应字符即可),后台账号拥有系统-系统设置-数据更新、采集-管理采集节点、系统-备份与恢复数据-备份数据权限
- 已确定需要补采的历史列表页固定分页规律,如“https://xxx.com/list_1_{页码}.html”(页码从漏采起始页开始到历史最后一页)
- 已完成过该栏目同规则的正常采集配置(包括列表页、详情页的采集规则测试通过)
步骤1:强制备份核心数据表
此步骤必须执行,防止操作失误导致已采集数据丢失:
- 登录帝国CMS后台,点击左侧菜单系统-备份与恢复数据-备份数据
- 勾选以下核心补采相关表:
- phome_ecms_栏目ID(如你的栏目ID是1,则勾选phome_ecms_1)
- phome_ecms_栏目ID_data_1
- phome_enews采集中(仅当你保留过采集记录可复用节点ID时勾选)
- phome_enewspl_1
- phome_enewssp_1
- 勾选备份文件格式:GZ压缩(推荐,占用空间小),点击下方开始备份
- 等待进度条走完,系统会自动跳转回备份页面,记录顶部提示的备份文件夹名称(格式为202X0X0X0X0X0X)
步骤2:修改原有采集节点的页码逻辑
帝国CMS默认采集规则会从第一页或已采集的下一页开始,我们需要强制锁定补采的历史分页范围:
- 点击左侧菜单采集-管理采集节点
- 找到对应栏目已配置好的采集节点,点击修改按钮(图标为铅笔)
- 滚动到页面底部的分页采集设置区域:
- 将分页采集方式从“自动识别分页/自定义分页循环”改为自定义固定分页
- 在自定义分页URL模板中,用(注意:这里不要用HTML,直接文字替代变量)[!--page--]替换原来的动态页码数字,例如原模板是“https://xxx.com/list_1_2.html”(漏采起始页是2),修改后为“https://xxx.com/list_1_[!--page--].html”
- 在起始页码中输入漏采的第一页历史页码(例如从第2页开始漏,填2)
- 在结束页码中输入历史最后一页的页码(例如该栏目历史总共有100页,填100)
- 保持列表页、详情页其他所有采集规则完全不变,点击底部提交按钮保存
步骤3:添加“URL重复过滤排除历史ID”的前置处理代码
此步骤是避免重复采集已发布历史数据的关键,需要修改PHP采集文件:
- 使用FTP工具(如FileZilla,下载地址:https://filezilla-project.org/download.php?type=client)或服务器后台文件管理器,打开帝国CMS安装目录下的/e/class/connect.php
- 在文件开头的
标签后,找到第一行空白处(通常是第2行),不要修改原有内容,直接插入以下完整代码(复制前请替换代码中的$ecms_table为你的补采栏目对应主表,例如栏目ID是1则填'phome_ecms_1'):
```php
// 帝国CMS历史数据补采前置过滤:排除已存在的真实URL
function echeck_repeat_url($url){
global $empire,$dbtbpre,$ecms_table;
$ecms_table = 'phome_ecms_1'; // 请务必替换为你的补采栏目主表
$url = trim($url);
if(empty($url)){
return false;
}
// 转义SQL特殊字符
$safe_url = $empire->escape($url);
// 检查主表是否已存在该URL
$check_sql = "SELECT id FROM {$ecms_table} WHERE trueurl='{$safe_url}' LIMIT 1";
$check_r = $empire->fetch1($check_sql);
if($check_r['id']){
return true;
}
return false;
}
```
- 继续使用FTP工具或文件管理器,打开帝国CMS安装目录下的/e/class/functions.php
- 使用Ctrl+F搜索函数名
GetUrlText(注意区分大小写),找到该函数的第一行内容function GetUrlText($url, $timeout=30, $post=''){
- 在该函数内部的第一行空白处(即大括号
{的下一行),插入以下过滤代码:
```php
// 前置触发历史URL重复过滤
if(echeck_repeat_url($url)){
return '';
}
```
- 保存并覆盖修改后的
connect.php和functions.php文件
步骤4:执行补采并关闭前置过滤
- 回到帝国CMS后台,点击左侧菜单采集-执行采集
- 勾选刚才修改过的补采集节点,点击底部开始采集按钮
- 观察采集进度条:
- 如果进度条显示“正在采集列表页...”且有“跳过重复URL”的提示(需要在采集节点的采集设置-列表/内容采集设置中勾选显示采集过程详细信息才能看到),说明前置过滤生效
- 如果有红色报错提示,先检查URL模板、起始结束页码是否正确,再检查数据库账号权限是否允许主表查询
- 采集完成后,点击左侧菜单采集-管理采集信息,找到刚才的补采集节点,点击右侧全部入库按钮
- 入库完成后,必须立即删除/注释前置过滤代码,否则后续正常采集也会被误过滤:
- 重新打开
/e/class/connect.php,在刚才插入的echeck_repeat_url函数每一行开头添加//(双斜杠注释)
- 重新打开
/e/class/functions.php,在刚才插入的过滤代码每一行开头添加//
- 保存并覆盖两个文件
步骤5:更新补采后的相关数据

此步骤确保补采的数据能正常显示在前台、列表页、搜索结果页:
- 点击左侧菜单系统-系统设置-数据更新
- 按以下顺序依次执行更新(必须严格按顺序,否则可能出现数据关联错误):
- 更新所有信息页(仅更新补采栏目即可,点击“选择栏目”下拉框勾选对应栏目)
- 更新所有栏目页
- 更新所有专题页(如果补采栏目有绑定专题)
- 更新首页
- 更新搜索数据(如果开启了帝国CMS内置搜索功能)
- 更新标签缓存(如果前台使用了灵动标签)
- 刷新前台首页、对应补采栏目的列表页、随机查看3-5条补采的详情页,确认数据正常显示
故障排查与回滚方案
常见故障1:前置过滤未生效,重复采集已发布数据
处理方法:
- 不要入库重复数据,直接在采集-管理采集信息中删除刚才采集的所有内容
- 检查
connect.php中的$ecms_table是否替换正确
- 检查
functions.php中的过滤代码是否插入到了GetUrlText函数的开头
常见故障2:补采后前台不显示新数据
处理方法:检查是否严格按步骤5的顺序更新了数据,特别是补采栏目的“更新所有信息页”和“更新所有栏目页”
回滚方案:操作失误导致已发布数据损坏
处理方法:
- 点击左侧菜单系统-备份与恢复数据-恢复数据
- 选择步骤1中记录的备份文件夹名称,勾选与补采相关的核心表
- 点击底部开始恢复,等待恢复完成后刷新后台