CMS采集规则编写教程,正则表达式提取内容
很多站长在用CMS搭建内容站时,都会遇到批量导入文章的需求。手动复制粘贴效率太低,用采集工具配合自定义正则表达式,就能把目标页面的标题、正文、图片等字段自动提取出来。这篇教程面向零基础用户,讲清楚采集规则怎么编写、正则表达式如何写、怎么验证提取结果,跟着操作就能完成一套可用的采集规则。
## 先理清采集规则里的几个核心概念
在动手写正则之前,需要先明白采集工具处理页面的基本流程:**列表页抓取链接 → 进入内容页 → 用正则匹配字段 → 入库到CMS**。
采集规则通常包含三部分:
- **列表页规则**:从栏目页提取文章详情页的URL,常用正则或XPath定位 `` 标签。
- **内容页规则**:在详情页里分别提取标题、正文、发布时间、作者等字段。
- **替换与过滤**:去掉广告代码、多余标签、站外链接等。
正则表达式在这里的作用是“按特征定位内容”。比如标题一般在 `` 里,正文在 `
` 里,正文在 `` 里,用正则把标签之间的文字抠出来即可。
需要提醒的是,采集前应确认目标站点的版权声明和robots协议,仅采集允许转载或自己有权使用的内容,避免法律风险。
## 准备工作和环境确认
开始前先准备好以下条件:
1. 一个可用的CMS站点,比如织梦、帝国、WordPress,确保数据库连接正常。
2. 安装采集工具,常见的有火车头采集器、蓝天采集器,或CMS自带的采集插件。本文以通用采集器界面为例,具体按钮名称可能略有差异,以你使用的工具实际显示为准。
3. 准备一个目标页面URL,用于测试正则是否匹配成功。
4. 浏览器打开目标页面,按 `F12` 查看源码,找到标题、正文对应的HTML结构。这一步最关键,正则写不对通常是没看清源码特征。
确认源码特征后,把关键片段的HTML复制出来,作为编写正则的参照。
## 编写正则表达式提取标题与正文
### 提取文章标题
假设源码中标题结构为:
```html
这里是文章标题
```
对应的正则写法:
```regex
]*>(.*?)
```
说明:`[^>]*` 表示h1标签内可能有class等属性,`(.*?)` 是捕获组,非贪婪匹配标签之间的内容。在采集器的“标题”字段里填入这段正则,捕获组选第1组。
### 提取正文内容
正文通常包裹在 `` 或 `` 里:
```html
正文段落一
正文段落二
```
正则写法:
```regex
([\s\S]*?)
```
这里用 `[\s\S]*?` 而不是 `.*?`,因为正文里包含换行,`.` 默认不匹配换行符。捕获组选第1组,就能拿到正文HTML。
如果正文外层有多个嵌套div,正则容易提前截断,建议改用更精确的结束特征,例如:
```regex
([\s\S]*?)
```
### 提取发布时间
源码示例:
```html
2024-05-20 10:30
```
正则:
```regex
(\d{4}-\d{2}-\d{2} \d{2}:\d{2})
```
`\d` 匹配数字,`{4}` 表示重复4次,这样能精确匹配日期格式。
### 列表页URL提取
列表页里文章链接一般长这样:
```html
标题
```
正则:
```regex
` 就停止。改用 `[\s\S]*?` 并加上更独特的结束标记,或者用“从开始特征到结束特征”的区间提取模式。
**采集后出现乱码**:目标页面编码可能是GBK,采集器里要把编码设置为GBK或自动识别,入库前统一转成UTF-8。
**图片不显示**:正文里的图片是相对路径,需要在采集规则里开启“图片本地化”或“补全URL”,把 `src="/uploads/..."` 替换为完整域名。
**正则贪婪导致匹配过多**:把 `*` 改成 `*?` 启用非贪婪模式,是解决这类问题最直接的办法。
正则表达式提取内容的核心思路就是“找唯一特征 + 非贪婪捕获 + 精确结束标记”。只要特征选得准,规则稳定性会明显提高。
## 验证采集结果是否可用
写完规则不要直接批量采集,先做小范围测试:
1. 在采集器里填入一条测试URL,点击“测试采集”或“预览”。
2. 检查标题、正文、时间字段是否完整,有没有多余HTML标签。
3. 把提取结果和原页面内容对比,确认没有漏段或串行。
4. 测试通过后,先采集5到10条,发布到CMS草稿箱,检查排版和图片是否正常。
5. 确认无误后再开启批量采集,并设置合理的采集间隔,避免给目标站造成压力。
如果采集器支持,把规则导出备份,换站点或换模板时方便复用和修改。
## 几个常见疑问
**正则里的捕获组和替换规则有什么区别?**
捕获组负责“抠出内容”,替换规则负责“清理内容”。比如正文里带广告代码,可以在替换规则里用正则把广告片段删掉,两者配合使用。
**不会写正则怎么办?**
很多采集器内置了可视化提取或XPath模式,点选页面元素就能生成规则。正则适合处理结构不规整的页面,可以先从简单字段练手。
**采集的内容能直接发布吗?**
建议二次编辑,补充内链、调整排版,并确认内容授权。纯采集发布容易产生重复内容,对SEO不利。
掌握CMS采集规则编写和正则表达式提取内容的方法后,批量建站和内容迁移的效率会明显提升。建议先拿一个测试栏目跑通流程,再逐步扩展到全站采集。
这里是文章标题
``` 对应的正则写法: ```regex]*>(.*?)
``` 说明:`[^>]*` 表示h1标签内可能有class等属性,`(.*?)` 是捕获组,非贪婪匹配标签之间的内容。在采集器的“标题”字段里填入这段正则,捕获组选第1组。 ### 提取正文内容 正文通常包裹在 `` 或 `` 里:
```html
```
正则写法:
```regex
正文段落一
正文段落二
([\s\S]*?)
```
这里用 `[\s\S]*?` 而不是 `.*?`,因为正文里包含换行,`.` 默认不匹配换行符。捕获组选第1组,就能拿到正文HTML。
如果正文外层有多个嵌套div,正则容易提前截断,建议改用更精确的结束特征,例如:
```regex
([\s\S]*?)
```
### 提取发布时间
源码示例:
```html
2024-05-20 10:30
```
正则:
```regex
(\d{4}-\d{2}-\d{2} \d{2}:\d{2})
```
`\d` 匹配数字,`{4}` 表示重复4次,这样能精确匹配日期格式。
### 列表页URL提取
列表页里文章链接一般长这样:
```html
标题
```
正则:
```regex
` 就停止。改用 `[\s\S]*?` 并加上更独特的结束标记,或者用“从开始特征到结束特征”的区间提取模式。
**采集后出现乱码**:目标页面编码可能是GBK,采集器里要把编码设置为GBK或自动识别,入库前统一转成UTF-8。
**图片不显示**:正文里的图片是相对路径,需要在采集规则里开启“图片本地化”或“补全URL”,把 `src="/uploads/..."` 替换为完整域名。
**正则贪婪导致匹配过多**:把 `*` 改成 `*?` 启用非贪婪模式,是解决这类问题最直接的办法。
正则表达式提取内容的核心思路就是“找唯一特征 + 非贪婪捕获 + 精确结束标记”。只要特征选得准,规则稳定性会明显提高。
## 验证采集结果是否可用
写完规则不要直接批量采集,先做小范围测试:
1. 在采集器里填入一条测试URL,点击“测试采集”或“预览”。
2. 检查标题、正文、时间字段是否完整,有没有多余HTML标签。
3. 把提取结果和原页面内容对比,确认没有漏段或串行。
4. 测试通过后,先采集5到10条,发布到CMS草稿箱,检查排版和图片是否正常。
5. 确认无误后再开启批量采集,并设置合理的采集间隔,避免给目标站造成压力。
如果采集器支持,把规则导出备份,换站点或换模板时方便复用和修改。
## 几个常见疑问
**正则里的捕获组和替换规则有什么区别?**
捕获组负责“抠出内容”,替换规则负责“清理内容”。比如正文里带广告代码,可以在替换规则里用正则把广告片段删掉,两者配合使用。
**不会写正则怎么办?**
很多采集器内置了可视化提取或XPath模式,点选页面元素就能生成规则。正则适合处理结构不规整的页面,可以先从简单字段练手。
**采集的内容能直接发布吗?**
建议二次编辑,补充内链、调整排版,并确认内容授权。纯采集发布容易产生重复内容,对SEO不利。
掌握CMS采集规则编写和正则表达式提取内容的方法后,批量建站和内容迁移的效率会明显提升。建议先拿一个测试栏目跑通流程,再逐步扩展到全站采集。
1
服务中心