这个功能是织梦采集器中一个非常强大和灵活的工具,它允许你绕过传统的“配置网址列表”和“规则列表”模式,直接通过编写代码(通常是PHP)来定义如何获取采集目标的数据以及如何将数据保存到你的网站。

(图片来源网络,侵删)
自定义接口就像是给采集器装上了一个“智能大脑”,你可以完全控制采集的每一步。
自定义接口的核心作用与优势
传统的采集方式是:
- 配置目标网址:提供一个包含多个文章列表页的URL列表。
- 配置采集规则:为列表页、内容页分别设置XPath或正则表达式,来提取标题、内容、图片等。
这种方式在网站结构简单、规则固定时非常方便,但当遇到以下情况时,就显得力不从心:
- 目标网站需要登录:传统方式无法处理登录后的会话。
- 目标网站有复杂的反爬机制:如动态加载、验证码、请求头验证等。
- 数据来源是API接口:数据直接通过JSON或XML提供,而不是HTML页面。
- 数据需要复杂的二次处理:比如需要调用另一个网站接口来补充信息,或者需要对内容进行特殊的格式化。
- 需要模拟特定浏览器行为:比如需要执行JavaScript才能加载内容。
自定义接口的优势:

(图片来源网络,侵删)
- 灵活性极高:可以使用任何PHP代码实现采集逻辑,不受限于内置的规则引擎。
- 功能强大:可以处理登录、Cookie、Session、API请求、文件上传等复杂场景。
- 逻辑可控:可以编写复杂的判断和循环,实现精准的数据抓取和清洗。
- 自动化程度高:可以将多个步骤(如登录、获取列表、获取详情、处理图片)整合到一个接口中。
自定义接口的工作原理
自定义接口本质上是一个PHP文件,它被织梦采集器调用,并返回一个特定格式的JSON数据,织梦会根据这个JSON数据来执行后续的采集和入库操作。
其工作流程如下:
- 创建接口文件:在织梦后台,你创建一个PHP文件(
my_custom_api.php),并编写采集逻辑。 - 配置采集任务:在织梦采集器中,创建一个新的采集任务。
- 选择接口模式:在任务配置中,选择“自定义接口”作为数据来源。
- 填写接口地址:指向你刚刚创建的PHP文件路径。
- 执行采集:织梦采集器会访问这个PHP文件,你的代码被执行,并返回一个包含文章列表或文章详细信息的JSON。
- 解析与入库:织梦根据你返回的JSON结构,自动填充采集表单,并执行入库操作。
如何创建和使用自定义接口(图文步骤)
步骤1:编写自定义接口PHP文件
这是最核心的一步,你需要创建一个PHP文件,并将其放置在你的织梦网站目录下(/dede/api/ 目录)。
文件结构:

(图片来源网络,侵删)
- 文件名:建议有意义的名字,如
zhihu_article_api.php。 - 返回数据:必须返回一个符合织梦要求的JSON字符串。
代码示例:假设我们要从一个需要登录的网站采集文章
<?php
/**
* 织梦自定义采集接口示例
* 功能:模拟登录后,获取文章列表,并返回织梦可识别的JSON格式
*/
// 1. 模拟登录并获取Cookie
$login_url = 'https://target-website.com/login.php';
$post_data = [
'username' => 'your_username',
'password' => 'your_password',
'submit' => 'Login'
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $login_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // 保存Cookie
// 执行登录
$login_response = curl_exec($ch);
// 2. 获取文章列表页内容
$list_url = 'https://target-website.com/article-list-page.html';
curl_setopt($ch, CURLOPT_URL, $list_url);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); // 使用保存的Cookie
$list_html = curl_exec($ch);
curl_close($ch);
// 3. 解析列表页,提取文章详情页URL (这里用简单的正则作为示例,实际中可用更强大的PHP解析器如Simple HTML DOM)
preg_match_all('/<a href="(\/article\/detail\/\d+\.html)">/i', $list_html, $matches);
$article_urls = $matches[1];
// 4. 准备返回给织梦的数据格式
// 织梦期望一个包含多个文章信息的数组
$return_data = [];
foreach ($article_urls as $url) {
$article_info = [];
// 拼接完整URL
$full_url = 'https://target-website.com' . $url;
// 设置织梦采集器在后续步骤中需要获取的字段
// key是织梦表单中的字段名(如title, writer, body等)
// value是提供给织梦的占位符,织梦会用这个URL去获取详情页内容
$article_info['title'] = $full_url; // 标题字段,织梦会自动去这个URL抓取标题
$article_info['writer'] = 'admin'; // 作者可以直接写死
$article_info['source'] = '目标网站'; // 来源
$article_info['litpic'] = $full_url; // 缩略图,织梦会自动去抓取
$article_info['body'] = $full_url; // 正文,织梦会自动去抓取
// 如果某些字段需要在接口中直接处理,而不是让织梦去抓取,可以这样写:
// $article_info['title'] = '我在接口里直接设置的标题';
$return_data[] = $article_info;
}
// 5. 返回JSON数据
header('Content-Type: application/json');
echo json_encode($return_data);
?>
关键点说明:
- 返回的JSON结构:必须是一个JSON数组,每个元素是一个对象,对象中的
key对应织梦后台的采集字段(如title,body,litpic等)。 - 字段值的两种方式:
- 提供URL:如果你的字段值(如标题、正文)需要从详情页获取,就直接把详情页的URL赋值给该字段,织梦在采集时会自动访问这个URL并根据该字段的规则进行抓取。
- 直接赋值:如果你在接口中已经处理好了数据(比如从API返回的JSON里解析出了标题),就直接把处理好的字符串赋值给该字段。
- cURL:在自定义接口中,
cURL是模拟HTTP请求最常用的工具,尤其适合处理登录、API调用等场景。
步骤2:在织梦后台配置采集任务
- 进入采集管理:登录织梦后台 -> 核心 -> 采集 -> 采集管理。
- 新建任务:点击“增加新任务”。
- 填写基本信息:
- 任务名称:给你的任务起个名字,如“知乎文章采集”。
- 目标任务网址:这里可以随便填一个,因为数据来源是自定义接口。
- 选择数据来源:
- 在“选择数据来源”部分,选择 “自定义接口”。
- 配置接口参数:
- 接口地址:填写你刚才创建的PHP文件的完整URL,
https://www.yourdomain.com/dede/api/zhihu_article_api.php。 - 请求方式:通常是GET或POST,如果你的接口需要POST数据,就选择POST,并填写POST参数。
- 请求头:如果目标网站需要特定的请求头(如User-Agent),可以在这里添加,格式为
key: value,每行一个。
- 接口地址:填写你刚才创建的PHP文件的完整URL,
- 配置采集字段:
- 这是最关键的一步,你需要告诉织梦,从接口返回的JSON中,哪个字段对应哪个文章属性。
- 选择
title。 - 选择
body。 - 缩略图:选择
litpic。 - ...其他字段如作者、来源等,一一对应。
- 注意:如果你的接口返回的
title字段直接就是标题字符串,那么这里就不需要再配置抓取规则了,如果你的接口返回的是URL,那么就需要配置XPath或正则来从这个URL的页面中提取标题。
- 保存并测试:
- 保存任务。
- 在任务列表中找到该任务,点击“开始采集”或“测试采集”,织梦会调用你的接口,并显示返回的数据,你可以在这里检查数据是否正确。
高级应用场景
- 调用第三方API:如果你的数据源是一个提供JSON数据的API,你可以在自定义接口中使用
file_get_contents或cURL去请求这个API,解析返回的JSON,然后构造成织梦需要的格式。 - 数据清洗与转换:在接口中,你可以使用PHP的字符串函数(
str_replace,preg_replace等)或HTML解析库(Simple HTML DOM)对抓取到的内容进行清洗,比如删除无关广告、格式化代码、替换图片链接等。 - 循环分页:你可以在接口代码中写一个循环,从第1页请求到第10页,将所有文章URL都收集起来,一次性返回给织梦。
注意事项
- 性能问题:自定义接口是在服务器端执行的,如果采集量很大或者接口逻辑复杂,可能会占用较多服务器资源,导致网站变慢,建议在非高峰期执行采集任务。
- 错误处理:在PHP代码中,最好加入
try...catch或if...else来判断请求是否成功,并返回错误信息,方便排查问题。 - 网站反爬:频繁的采集请求可能会触发目标网站的反爬机制,导致IP被封,请合理设置采集频率,并考虑使用代理IP。
- 文件权限:确保你创建的PHP文件所在目录有正确的读写权限(特别是保存Cookie的文件)。
- 遵守法律法规:采集他人网站内容时,务必遵守网站的
robots.txt协议和相关的法律法规,尊重版权。
通过自定义接口,你可以将织梦采集器的能力发挥到极致,实现许多传统方式无法完成的复杂采集需求,它为高级用户提供了极大的自由度和控制力。
