采集演示
- 新建采集任务 下面以文章采集为示例
- 添加采集规则 采集文章页面一般分为三种形式,下面分别介绍三种形式的规则配置
- 列表静态、内容静态
- 列表json、内容静态
- 列表json、内容json
- 运行采集
- 采集测试 规则配置完成后,点击测试按钮模拟采集,校验规则是否正确
- 运行采集规则 根据自动导入配置决定是否即时导入
新建采集任务
下面以文章采集为示例
- 配置导入表:选择文章表(cms_content)
- 设置自动导入 :选择"是":采集成功后自动导入到cms_content表中;选择"否":需要在采集日志中手动选择采集到的数据导入

添加采集规则
列表静态、内容静态
此场景为列表页面、文章详情页均是静态的
- 配置列表页地址
观察静态页面地址情况,一般列表页面地址为http://www.example.com/list-页号.html,
所以配置时先开启分页,设置采集的起始与结束页号,列表页面地址配置成http://www.example.com/list-%s.html,其中 %s为页号占位符,从起始页开始

Tip
如果列表第一页地址为:http://www.example.com/index.html,后续页面地址为http://www.example.com/list-页号.html 此时需要分两次进行采集,两次采集只需更换列表页地址
- 配置列表采集区域
通过F12打开控制台,找到文章列表初始区域,如图起始区域为<div class="product_ul">, 结束区域因为div不能唯一确定,所以选择下一个区域的开头作为起始区域,此处为<div class="yema">

- 配置内容链接匹配规则
如下图:文章地址 可直接通过正则匹配
href="(.*?)"

Tip
注意:需要用()把链接地址包裹起来,不然会出现匹配链接不全的问题
-
配置字段匹配规则
- 默认字段
一般有下面几个默认字段,字段匹配规则填写为默认
栏目id 配置前需手动新增采集的栏目,再将栏目的id填写到字段匹配(默认值)中,对应数据库字段 CATEGORY_ID
审批状态 (终审通过/草稿)默认终审通过,对应数据库字段 PROGRESS_STATUS
是否显示(0显示/1不显示)默认0,对应数据库字段 CONTENT_DISPLAY

- 其他字段
详情的内容一般是最完整的,优先从详情获取内容;只有部分字段在详情没有时,才使用列表页匹配获取内容
其他字段匹配建议优先使用xpath 匹配; 无法处理时考虑正则
xpath 一般使用 在控制台中选择需要匹配的区域,右键选择复制xpath

以下列举几个常见字段匹配规则分析
文章标题 目标div结构只有一个标题,直接使用xpath获取,xpath路径追加/text()用于取文本内容,对应数据库字段 CONTENT_TITLE

文章内容 目标div结构内为文章内容,直接使用xpath获取,xpath路径追加/html()用于取内部完整html结构,对应数据库字段 CONTENT_DETAILS

发布时间 分析结构,div内包含时间和人气两部分,通过xpath无法定位具体时间值,此处采用正则处理,表达式:时间:(.*?) 人气:
(.*?)匹配到的值会存进数据库,如下图会将2023-06-08存入数据库,时间格式会自动转换;
注意选择日期类型,对应数据库字段 CONTENT_DATETIME

文章缩略图 缩略图一般在列表中展示,此处选择列表规则匹配,一般通过xpath匹配图片
如图缩略结构a/div/img

故xpath规则如下,其中//a表示选择a标签;{}为占位符,区分不同的文章详情的链接地址,唯一确定图片属于哪篇文章;@src表示取图片的src属性
//a[@href="{}"]/div/img/@src 其中//a[@href="{}"]/.../img/@src 一般为固定结构,中间的结构(...)可自行修改另外系统的图片格式是以json数组结构存储,还需要在结果替换规则里将图片路径组织成json结构,可直接复制下面转换模板
<#if content??> [<#list content as img> <#assign url=img?substring(img?last_index_of("/")+1)> {"url":"/upload/${app.id}/content/${url}","uid":"${url}"} </#list>] </#if>
Tip
采集的图片默认存放在本地目录upload/站点id/content目录下,修改默认目录参考:修改采集的图片存储目录
以下为完整字段示例

列表json,内容静态
此场景为列表页面是动态渲染的,文章详情页是静态的
- 配置列表页地址
列表数据是动态渲染的,这里配置列表数据请求接口,如文章列表地址:http://192.168.0.73:8090/cms/content/list.do?typeid=1666653706550321156
列表类型选择json,分页选择否
- 配置列表采集区域
列表区域填写列表数据返回路径,如图为data/rows,目录开头加$,结尾加[*], 所以列表开始区域填写 $.data.rows[*],不需要写结束区域

- 配置内容链接匹配规则
如图目标地址由两部发 http://192.168.0.73:8090/html/web/ + 路径,上图列表json数据已经返回了路径
内容链接匹配为: http://192.168.0.73:8090/html/web/{link} ,link为上述data/rows数组中的值,数组中的值可直接通过{}取

- 配置字段匹配规则
因为文章详情页是静态的,故文章详情页中的字段取法与上述列表静态、内容静态
文章缩略图 缩略图在列表页,列表是动态获取的,此处通过JsonPath获取缩略图
$.data.rows[{}].litpic
其中$.data.rows[{}] 为上述文章列表返回的结构,中间的{}为占位符,唯一确定图片属于哪篇文章,litpic为文章缩略图返回的字段
注意:缩略图返回的图片路径为json数组结构,如果不是需要将图片路径组织成json结构,模板如下
<#if content??>
[<#list content as img>
<#assign url=img?substring(img?last_index_of("/")+1)>
{"url":"/upload/${app.id}/content/${url}","uid":"${url}"}
</#list>]
</#if>
列表json、内容json
此场景为列表页面、文章详情页面均是动态渲染的
- 配置列表页地址、采集区域
参考上述列表json,内容静态部分
- 配置内容链接匹配规则
填写详情页请求接口,如文章详情页数据获取地址:http://192.168.0.73:8090/cms/content/get.do?id={id}
其中id为列表数据返回的字段

- 配置字段匹配规则
以下只介绍差异部分,如图为文章详情接口返回的数据

在详情页的属性可直接通过 $.数据存储目录.属性名
如文章标题: $.data.title
文章内容: $.data.content

运行采集
采集规则测试
规则新增好后,在规则列表里点击测试按钮可以模拟采集作业,观察规则是否生效、采集的数据是否正确

运行采集规则
选择需要运行的规则,点击运行采集器会根据选择的规则作业,当采集任务配置的自动导入规则为是时,采集的数据会自动导入到配置的表

如果自动导入为否,需要在日志列表中手动选择需要导入的数据,会导入到采集任务配置的导入表中
