## 分页列表采集
下面我们以采集站长之家的列表页为例:[http://www.chinaz.com/biz/info/1.shtml](http://www.chinaz.com/biz/info/1.shtml)
## 1. 基本信息
基本信息配置很简单,按照表单备注提示填写即可。
![](https://box.kancloud.cn/be4bd9e367693ace7a19e9e46c06ca39_1492x1170.png)
>[info] 目标编码:用谷歌浏览器打开你要采集的网址,点击右键-审查元素,查看网页源码。如下图:
![](https://box.kancloud.cn/27f2cf15298b9170a48bdbbb3aeeadfb_1682x970.png)
>[info] 网址类型:
分页列表:采集有规则的分页数据。
固定网址:采集固定的某个或多个页面。
>[info] 列表首页:部分网站的列表开始页是index或其他命名规则,有效页码数是从2开始的时候,此处为必填项。
>[info] 链接前缀:指列表页里面的内容链接不是全路径时,例:/detail/124.html,类似这样的链接的时候,此处为必填。
>[info] 资源前缀:指图片或文件的访问地址不是全路径时,例:/upload/img/123.png,类似这样的地址的时候,此处为必填。
## 2. 列表页规则
>[info] 基本信息里面的网址类型设置为分页列表时必须配置列表页规则,如果为固定网址时,请忽略列表页规则的配置。
![](https://box.kancloud.cn/eafd5e92ae2090dbe05f56cdbc2a7c73_1912x436.png)
> 标题:顾名思义,就是字段对应的标题
> 字段名:指数据库对应的字段名,如需入库,必须与真实的数据库字段同名
> 选择器:即我们要采集的CSS选择器,例如:.post-title>a
> 属性:即我们要采集的CSS选择器绑定的属性。纯文字填写:text,含html标签填写:html,其他属性自行选择,如a标签的href属性则填写:href
>固定值:指当前字段无需通过采集获取,需要固定为某个值,这时前面的选择器、属性、内容过滤均可不填
>内容过滤:采集的目标内容里面,有些数据是我们不需要的,我们可以用选择器的方式来过滤这些内容
>入库:指当前采集的字段是否需要存入数据库
> 列表:指是否需要在采集内容管理页面显示
> 下载:指当前字段如果为图片或其他文件时,是否需要下载到本地服务器
>[warning] 列表页规则默认创建了一个详情链接规则,此规则不填写将无法正常抓取到完整的内容页面。我们以采集站长之家的列表页为例:
![](https://box.kancloud.cn/35548ebedbacc67d3e2e8aead000aaf4_2220x992.png)
*****
正确的规则如下:
*****
![](https://box.kancloud.cn/8be0af292e0bb47e604fb8c26670acbf_1872x302.png)
*****
如果还需要采集其他字段信息(如:文章标题),点击右侧蓝色的加号。
*****
![](https://box.kancloud.cn/2473b2529391ce6caf17014560f3d04f_1886x942.png)
*****
正确的规则如下:
*****
![](https://box.kancloud.cn/6bacb608be99c471bdcdd21a0b38728d_1926x424.png)
## 内容页规则
>[info] 内容页规则含义同上。我们以采集此链接为例:[http://www.chinaz.com/2019/0613/1023717.shtml](http://www.chinaz.com/2019/0613/1023717.shtml)
## 需求1:采集文章来源
![](https://box.kancloud.cn/950aa037bd15bdc4dc9814bcd3877be8_2178x1052.png)
*****
通过浏览器审查元素找到了文章来源被包含在class名为source的span标签里面,而且里面还嵌套了一个a标签。那我们的采集规则就变得很简单了,用css选择器的写法就是:`.source>a`,我们需要采集的是A标签包含的文字信息,所以我们的属性直接填写`text`即可。如下图:
![](https://box.kancloud.cn/288a84d153caa37c518277376d6fe73f_1998x272.png)
## 需求2:采集文章内容
![](https://box.kancloud.cn/bb27fcb34e40d8e261b44e64846646fc_2238x1390.png)
*****
我们通过审查元素,找到文章的内容被包含在一个class为detail的div标签里面。采集规则的选择器就特别简单了,直接填写`.detail`即可。文章的内容包含有很多的排版,排版里面是含有html标签的,所以我们的采集属性需要填写`html`。如下图:
![](https://box.kancloud.cn/fff7f961a25afc305126368e20a8eb28_2102x424.png)
>[info] 细心的小伙伴可能已经发现了内容页规则多了一个分页选项,有些网站的文章内容比较长([http://www.chinaz.com/manage/2019/0428/1012578.shtml](http://www.chinaz.com/manage/2019/0428/1012578.shtml)),使用了内容分页,如果希望采集到完整的内容,我们就需要勾选上分页选项。
## 3. 高级配置
![](https://box.kancloud.cn/f86ac2c57e51b9954acff08e385a5d4a_1824x644.png)
*****
>[info] 内容分页就是上面讲的文章内容分页,依然用CSS选择器的方式提取分页代码。
![](https://box.kancloud.cn/804c0ce1905ba4064db0b4f368c19478_1596x724.png)
*****
我们看到分页代码被class名为pagebreak的div标签包裹起来了。选择器名填写`.pagebreak>a`即可。属性保持默认值 `href` 即可。编辑器根据自己实际的使用情况选择,选择编辑器主要是为了自动转换不同编辑器的分页标记。
![](https://box.kancloud.cn/527c34405f5cd5749626e74445b6a975_1906x622.png)
>[info] 回调方法:为了方便您对接不同业务模块的采集需求,数据采集完成后会根据你自定义的入库字段,生成一个新的数据结构并推送到你指定的回调方法里面。你可以根据自己的需求对采集的数据做二次处理并入库。
```
<?php
namespace app\blog\admin;
use app\system\admin\Admin;
use app\blog\model\BlogArticle as ArticleModel;
/**
* 文章控制器
* @package app\blog\admin
*/
class Article extends Admin
{
/**
* 采集插件接口示例
* @param array $data 采集的数据集
* @return number/string
*/
public function collect($data)
{
// 数据验证
$result = $this->validate($data, 'app\blog\validate\Article');
if ($result !== true) {
return $result;
}
// 入库
$model = new ArticleModel;
if ($model->save($data) === false) {
return $model->getError() ? $model->getError() : '入库保存失败';
}
// 必须返回新增主键ID
return $model->id;
}
}
```
>[danger] 特别说明:回调方法必须在后台控制器(admin)目录下面。
- 序言
- 环境配置
- 下载及安装
- 目录结构
- 系统配置
- 多语言
- 命令行(pro版)
- 自动生成模块或插件(build)
- 生成模块
- 生成插件
- 自动生成增删改查(crud)
- 第一步:创建数据表
- 第二步:使用crud指令生成
- 自动生成类库文件(make)
- 生成控制器文件(make:controller)
- 生成模型文件(make:model)
- 生成逻辑文件(make:logic)
- 生成服务文件(make:service)
- 生成验证器文件(make:validate)
- 构建器(pro版)
- 表单构建器(form)
- 表单属性设置
- 添加表单项
- 文本框(text)
- 隐藏域(hidden)
- 密码框(password)
- 文本域(textarea)
- 单文件(file)
- 多文件(files)
- 单图(image)
- 多图(images)
- 开关(switch)
- 单选(radio)
- 多选(checkbox)
- 下拉框(select)
- 标签(tag)
- 日期时间(datetime)
- 颜色选择器(color)
- 富文本编辑器(editor)
- 滑块(slider)
- 评分(rate)
- 穿梭框(transfer)
- 进度条(progress)
- 树形(tree)
- 联动(linkage)
- 自定义html(html)
- 分隔线(line)
- 文字(txt)
- 下拉框增强版(select+)
- 数据表格(table)
- 添加表单分组(group)
- 栅格布局(grid)
- 触发器(trigger)
- 通用上传方法
- 表格构建器(table)
- 表格基础配置
- 添加表头工具栏
- 添加表格筛选
- 页面提示(pageTips)
- 引入 JS 文件
- 引入 CSS 文件
- 渲染额外 JS 代码
- 渲染额外 CSS 代码
- 模块开发
- 1.生成模块
- 2.创建菜单
- 3.创建控制器
- 后台通用方法
- 插件开发
- 1.新建插件
- 2.插件配置
- 3.插件控制器
- 4.插件模板
- 5.插件钩子
- 模板替换变量
- 公共函数库
- 后台通用JS方法
- 常见问题
- 官方模块
- CMS内容管理模块
- 目录结构
- 模板标签
- API接口
- 栏目页/内容页
- 小程序发布
- 官方插件
- 第三方登录
- excel插件
- 万能采集
- 采集规则
- 采集内容