Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

采集演示

  1. 新建采集任务 下面以文章采集为示例
  2. 添加采集规则 采集文章页面一般分为三种形式,下面分别介绍三种形式的规则配置
    • 列表静态、内容静态
    • 列表json、内容静态
    • 列表json、内容json
  3. 运行采集
    • 采集测试 规则配置完成后,点击测试按钮模拟采集,校验规则是否正确
    • 运行采集规则 根据自动导入配置决定是否即时导入

新建采集任务

下面以文章采集为示例

  • 配置导入表:选择文章表(cms_content)
  • 设置自动导入 :选择"是":采集成功后自动导入到cms_content表中;选择"否":需要在采集日志中手动选择采集到的数据导入

img.png

添加采集规则

列表静态、内容静态

此场景为列表页面、文章详情页均是静态的

  • 配置列表页地址

观察静态页面地址情况,一般列表页面地址为http://www.example.com/list-页号.html,

所以配置时先开启分页,设置采集的起始与结束页号,列表页面地址配置成http://www.example.com/list-%s.html,其中 %s为页号占位符,从起始页开始

img_1.png

Tip

如果列表第一页地址为:http://www.example.com/index.html,后续页面地址为http://www.example.com/list-页号.html 此时需要分两次进行采集,两次采集只需更换列表页地址

  • 配置列表采集区域

通过F12打开控制台,找到文章列表初始区域,如图起始区域<div class="product_ul">结束区域因为div不能唯一确定,所以选择下一个区域的开头作为起始区域,此处为<div class="yema">

img_3.png

  • 配置内容链接匹配规则

如下图:文章地址 可直接通过正则匹配

href="(.*?)"

img_4.png

Tip

注意:需要用()把链接地址包裹起来,不然会出现匹配链接不全的问题

  • 配置字段匹配规则

    • 默认字段

    一般有下面几个默认字段,字段匹配规则填写为默认

    栏目id 配置前需手动新增采集的栏目,再将栏目的id填写到字段匹配(默认值)中,对应数据库字段 CATEGORY_ID

    审批状态 (终审通过/草稿)默认终审通过,对应数据库字段 PROGRESS_STATUS

    是否显示(0显示/1不显示)默认0,对应数据库字段 CONTENT_DISPLAY

    img_5.png

    • 其他字段

    详情的内容一般是最完整的,优先从详情获取内容;只有部分字段在详情没有时,才使用列表页匹配获取内容

    其他字段匹配建议优先使用xpath 匹配; 无法处理时考虑正则

    xpath 一般使用 在控制台中选择需要匹配的区域,右键选择复制xpath
    img_6.png

    以下列举几个常见字段匹配规则分析

    文章标题 目标div结构只有一个标题,直接使用xpath获取,xpath路径追加/text()用于取文本内容,对应数据库字段 CONTENT_TITLE

    img_6.png

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

    img_7.png

    发布时间 分析结构,div内包含时间和人气两部分,通过xpath无法定位具体时间值,此处采用正则处理,表达式:时间:(.*?) 人气:

    (.*?)匹配到的值会存进数据库,如下图会将2023-06-08存入数据库,时间格式会自动转换;

    注意选择日期类型,对应数据库字段 CONTENT_DATETIME

    img_8.png

    文章缩略图 缩略图一般在列表中展示,此处选择列表规则匹配,一般通过xpath匹配图片

    如图缩略结构a/div/img

    img_9.png

    故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目录下,修改默认目录参考:修改采集的图片存储目录

以下为完整字段示例

img_10.png

列表json,内容静态

此场景为列表页面是动态渲染的,文章详情页是静态的

  • 配置列表页地址

列表数据是动态渲染的,这里配置列表数据请求接口,如文章列表地址:http://192.168.0.73:8090/cms/content/list.do?typeid=1666653706550321156

列表类型选择json,分页选择否

  • 配置列表采集区域

列表区域填写列表数据返回路径,如图为data/rows,目录开头加$,结尾加[*], 所以列表开始区域填写 $.data.rows[*],不需要写结束区域

img_11.png

  • 配置内容链接匹配规则

如图目标地址由两部发 http://192.168.0.73:8090/html/web/ + 路径,上图列表json数据已经返回了路径

内容链接匹配为: http://192.168.0.73:8090/html/web/{link} ,link为上述data/rows数组中的值,数组中的值可直接通过{}取

img_12.png

  • 配置字段匹配规则

因为文章详情页是静态的,故文章详情页中的字段取法与上述列表静态、内容静态

文章缩略图 缩略图在列表页,列表是动态获取的,此处通过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为列表数据返回的字段

img_13.png

  • 配置字段匹配规则

以下只介绍差异部分,如图为文章详情接口返回的数据

img_14.png

在详情页的属性可直接通过 $.数据存储目录.属性名

如文章标题: $.data.title

文章内容: $.data.content

img_15.png

运行采集

采集规则测试

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

Alt text

运行采集规则

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

img_16.png

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

img_17.png