## 分頁列表采集
下面我們以采集站長之家的列表頁為例:[http://www.chinaz.com/biz/info/1.shtml](http://www.chinaz.com/biz/info/1.shtml)
## 1. 基本信息
基本信息配置很簡單,按照表單備注提示填寫即可。

>[info] 目標編碼:用谷歌瀏覽器打開你要采集的網址,點擊右鍵-審查元素,查看網頁源碼。如下圖:

>[info] 網址類型:
分頁列表:采集有規則的分頁數據。
固定網址:采集固定的某個或多個頁面。
>[info] 列表首頁:部分網站的列表開始頁是index或其他命名規則,有效頁碼數是從2開始的時候,此處為必填項。
>[info] 鏈接前綴:指列表頁里面的內容鏈接不是全路徑時,例:/detail/124.html,類似這樣的鏈接的時候,此處為必填。
>[info] 資源前綴:指圖片或文件的訪問地址不是全路徑時,例:/upload/img/123.png,類似這樣的地址的時候,此處為必填。
## 2. 列表頁規則
>[info] 基本信息里面的網址類型設置為分頁列表時必須配置列表頁規則,如果為固定網址時,請忽略列表頁規則的配置。

> 標題:顧名思義,就是字段對應的標題
> 字段名:指數據庫對應的字段名,如需入庫,必須與真實的數據庫字段同名
> 選擇器:即我們要采集的CSS選擇器,例如:.post-title>a
> 屬性:即我們要采集的CSS選擇器綁定的屬性。純文字填寫:text,含html標簽填寫:html,其他屬性自行選擇,如a標簽的href屬性則填寫:href
>固定值:指當前字段無需通過采集獲取,需要固定為某個值,這時前面的選擇器、屬性、內容過濾均可不填
>內容過濾:采集的目標內容里面,有些數據是我們不需要的,我們可以用選擇器的方式來過濾這些內容
>入庫:指當前采集的字段是否需要存入數據庫
> 列表:指是否需要在采集內容管理頁面顯示
> 下載:指當前字段如果為圖片或其他文件時,是否需要下載到本地服務器
>[warning] 列表頁規則默認創建了一個詳情鏈接規則,此規則不填寫將無法正常抓取到完整的內容頁面。我們以采集站長之家的列表頁為例:

*****
正確的規則如下:
*****

*****
如果還需要采集其他字段信息(如:文章標題),點擊右側藍色的加號。
*****

*****
正確的規則如下:
*****

## 內容頁規則
>[info] 內容頁規則含義同上。我們以采集此鏈接為例:[http://www.chinaz.com/2019/0613/1023717.shtml](http://www.chinaz.com/2019/0613/1023717.shtml)
## 需求1:采集文章來源

*****
通過瀏覽器審查元素找到了文章來源被包含在class名為source的span標簽里面,而且里面還嵌套了一個a標簽。那我們的采集規則就變得很簡單了,用css選擇器的寫法就是:`.source>a`,我們需要采集的是A標簽包含的文字信息,所以我們的屬性直接填寫`text`即可。如下圖:

## 需求2:采集文章內容

*****
我們通過審查元素,找到文章的內容被包含在一個class為detail的div標簽里面。采集規則的選擇器就特別簡單了,直接填寫`.detail`即可。文章的內容包含有很多的排版,排版里面是含有html標簽的,所以我們的采集屬性需要填寫`html`。如下圖:

>[info] 細心的小伙伴可能已經發現了內容頁規則多了一個分頁選項,有些網站的文章內容比較長([http://www.chinaz.com/manage/2019/0428/1012578.shtml](http://www.chinaz.com/manage/2019/0428/1012578.shtml)),使用了內容分頁,如果希望采集到完整的內容,我們就需要勾選上分頁選項。
## 3. 高級配置

*****
>[info] 內容分頁就是上面講的文章內容分頁,依然用CSS選擇器的方式提取分頁代碼。

*****
我們看到分頁代碼被class名為pagebreak的div標簽包裹起來了。選擇器名填寫`.pagebreak>a`即可。屬性保持默認值 `href` 即可。編輯器根據自己實際的使用情況選擇,選擇編輯器主要是為了自動轉換不同編輯器的分頁標記。

>[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插件
- 萬能采集
- 采集規則
- 采集內容