核心概念:DedeCMS的标签系统
在开始之前,你需要理解DedeCMS的标签是如何工作的:
- 文章模型:每篇文章都属于一个模型(如“文章”、“软件”等),模型里定义了文章可以包含的字段,如标题、内容、作者、来源、 tags 等。
- 标签字段:
tags是文章模型中的一个特殊文本字段,用于存储文章的标签,多个标签用英文逗号 分隔。 - 采集规则:采集规则定义了如何从目标网站抓取信息,并映射到DedeCMS的字段上,你需要做的就是将目标网站的标签信息,正确地映射到DedeCMS的
tags字段。
最简单、最推荐的方法(使用内置的“TAG自动获取”功能)
这是DedeCMS采集器自带的功能,非常适合大多数情况,尤其是目标网站的标签格式规范时。
适用场景:目标网页的标签列表非常清晰,通常位于 <meta name="keywords"> 标签内,或者在一个特定的、有规律的HTML结构中(如 <div class="tags">...</div>)。
操作步骤:
-
进入采集管理:登录DedeCMS后台,依次点击
采集->采集管理。 -
编辑或新建采集规则:
- 如果是编辑现有规则,在规则列表中找到你的规则,点击后面的
选择->修改。 - 如果是新建规则,点击
增加新采集,填写基本信息并进入下一步。
- 如果是编辑现有规则,在规则列表中找到你的规则,点击后面的
-
设置“文章内容”采集:
- 在左侧的“文章内容”列表中,找到
Tags字段。 - 点击
获取按钮,DedeCMS会自动分析当前网页,尝试找到标签列表。 - 关键步骤:如果自动获取不成功,你需要手动编写 采集公式 来提取标签,这是最核心的一步。
- 在左侧的“文章内容”列表中,找到
-
编写采集公式(手动指定标签位置):
-
情况A:标签在
<meta name="keywords">中 这是最常见的情况,采集公式非常简单:<meta name="keywords" content="([^"]*)">这个正则表达式会提取
content属性中引号内的所有内容,这通常就是网站的keywords,可以直接作为文章的tags。 -
情况B:标签在一个特定的HTML容器内 假设目标网站的标签HTML结构如下:
<div class="post-tags"> <a href="/tag/php">php</a> <a href="/tag/dedecms">dedecms</a> <a href="/tag/web">web</a> </div>你需要编写一个公式来提取
<a>标签内的文本,公式如下:<div class="post-tags">(.+?)</div>在下方的 列表链接/内容链接/内容处理 选项卡中,勾选 使用[组内循环],这会让采集器对提取到的整个
<div>内容进行循环处理。在下面的 循环处理 部分,设置:
- 循环体采集公式:
<a[^>]+>([^<]+)</a> - 保存方式:选择
合并到一个字段。 - 合并方式:选择
用逗号分隔。
这样,采集器会找到所有
<a>标签里的文字(php, dedecms, web),然后用逗号合并成php,dedecms,web,存入tags字段。 - 循环体采集公式:
-
情况C:标签是逗号分隔的纯文本 如果标签就在某个
<p>或<span>里,直接用逗号隔开,<span class="keywords">织梦,dedecms,采集,教程</span>
那么公式就很简单:
<span class="keywords">([^<]+)</span>直接提取括号里的内容即可。
-
-
保存并测试:
- 设置好
Tags字段的采集公式后,保存规则。 - 在
测试采集页面,选择几条包含不同标签形式的链接进行测试。 - 查看右侧的“文章内容预览”,确认
Tags字段是否正确抓取到了你想要的标签,并且格式是标签1,标签2,标签3的形式。
- 设置好
更灵活的自定义方法(通过“内容处理”)
如果目标网站的标签结构非常混乱,或者你想对抓取到的标签进行二次处理(如去除无关词汇、统一格式等),可以使用“内容处理”功能。
适用场景:需要对标签进行额外处理,或者目标网站标签没有固定规律。
操作步骤:
-
采集规则设置:按照方法一的步骤,先在
Tags字段设置一个基础的采集公式,哪怕只是一个大致的范围。 -
处理”:
- 在采集规则编辑界面的顶部,点击
内容处理选项卡。 - 你可以对
Tags字段的内容进行修改。
- 在采集规则编辑界面的顶部,点击
-
编写处理代码:
- 在左侧的字段列表中选择
Tags。 - 在右侧的 替换/处理 文本框中,你可以使用正则表达式进行替换。
示例:
- 场景:你采集到的标签是
php教程,dedecms模板,网站建设, 建设网站,你想去掉“教程”、“模板”、“建设”这些词,并确保没有空格。- 替换代码:
[replacetags] 处理说明:去除特定词并统一格式 正则表达式:教程|模板|建设 替换为:(留空) - 处理后的结果:
php,dedecms,网站,网站 - 额外处理:为了去除空格,可以再加一行:
[replacetags] 处理说明:去除空格 正则表达式:\s+ 替换为:, - 最终结果:
php,dedecms,网站,网站(注意:这个例子可能会产生连续逗号,你需要再处理一下 -> )
- 替换代码:
- 在左侧的字段列表中选择
-
保存并测试:同样,保存规则后进行测试,查看
Tags字段的处理结果是否符合预期。
高级方法(通过修改采集程序文件)
警告:此方法需要你具备一定的PHP编程能力和对DedeCMS文件结构的了解,修改核心文件有导致网站崩溃的风险,请务必先备份文件。
适用场景:需要实现极其复杂的标签逻辑,或者DedeCMS自带的采集器无法满足你的需求。
操作步骤(概念性):
-
定位文件:DedeCMS的采集核心逻辑通常位于
/include/dedecollection.class.php文件中,你可以搜索function GetArcHtml或与tag相关的函数。 -
修改逻辑:在
dedecollection.class.php中,找到处理tags字段的相关代码段,你可以在它原有逻辑的基础上,加入你自己的PHP代码。-
例如:你可以在
tags字段被赋值后,增加一个函数调用,对标签进行更复杂的处理。// 假设 $this->ArcTags 已经是采集到的原始标签字符串 $this->ArcTags = $this->CustomProcessTags($this->ArcTags);
-
然后在类的某个地方(比如文件末尾)添加你的自定义函数:
/** * 自定义标签处理函数 * @param string $tagsStr 原始标签字符串 * @return string 处理后的标签字符串 */ function CustomProcessTags($tagsStr) { // 1. 去除 "教程" 关键词 $tagsStr = str_replace('教程', '', $tagsStr); // 2. 用逗号分割成数组 $tagsArray = explode(',', $tagsStr); // 3. 去除空值并重新索引 $tagsArray = array_filter($tagsArray); // 4. 去重 $tagsArray = array_unique($tagsArray); // 5. 重新合并成字符串 return implode(',', $tagsArray); }
-
-
测试:修改文件后,清空缓存,重新测试采集功能。
总结与最佳实践
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
| 内置功能 | 简单、安全、官方支持,能满足80%的需求 | 灵活性相对较低 | ⭐⭐⭐⭐⭐ (首选) |
| 内容处理 | 非常灵活,可以对标签进行二次加工 | 需要熟悉正则表达式 | ⭐⭐⭐⭐ (复杂场景首选) |
| 修改文件 | 功能无限强大,可实现任何逻辑 | 风险高,需要编程能力,升级麻烦 | ⭐ (仅限高级开发者) |
给你的建议:
- 从方法一开始:先尝试使用DedeCMS自带的“TAG自动获取”功能,并手动编写采集公式,这是最直接、最安全的方式。
- 善用正则表达式:学习基本的正则表达式(如 捕获、
[^]取反、 或 匹配多次)是解决采集问题的核心技能。 - 测试、测试、再测试:每次修改规则后,一定要进行充分测试,确保采集的准确性和稳定性。
- 保持标签简洁:采集到的标签最好控制在5个以内,并且每个标签不宜过长,这样更有利于SEO和用户体验。
希望这份详细的指南能帮助你成功在DedeCMS采集时添加标签!
