织梦采集自定义接口

99ANYc3cd6
预计阅读时长 18 分钟
位置: 首页 织梦建站 正文

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

织梦采集自定义接口
(图片来源网络,侵删)

自定义接口就像是给采集器装上了一个“智能大脑”,你可以完全控制采集的每一步。


自定义接口的核心作用与优势

传统的采集方式是:

  1. 配置目标网址:提供一个包含多个文章列表页的URL列表。
  2. 配置采集规则:为列表页、内容页分别设置XPath或正则表达式,来提取标题、内容、图片等。

这种方式在网站结构简单、规则固定时非常方便,但当遇到以下情况时,就显得力不从心:

  • 目标网站需要登录:传统方式无法处理登录后的会话。
  • 目标网站有复杂的反爬机制:如动态加载、验证码、请求头验证等。
  • 数据来源是API接口:数据直接通过JSON或XML提供,而不是HTML页面。
  • 数据需要复杂的二次处理:比如需要调用另一个网站接口来补充信息,或者需要对内容进行特殊的格式化。
  • 需要模拟特定浏览器行为:比如需要执行JavaScript才能加载内容。

自定义接口的优势

织梦采集自定义接口
(图片来源网络,侵删)
  • 灵活性极高:可以使用任何PHP代码实现采集逻辑,不受限于内置的规则引擎。
  • 功能强大:可以处理登录、Cookie、Session、API请求、文件上传等复杂场景。
  • 逻辑可控:可以编写复杂的判断和循环,实现精准的数据抓取和清洗。
  • 自动化程度高:可以将多个步骤(如登录、获取列表、获取详情、处理图片)整合到一个接口中。

自定义接口的工作原理

自定义接口本质上是一个PHP文件,它被织梦采集器调用,并返回一个特定格式的JSON数据,织梦会根据这个JSON数据来执行后续的采集和入库操作。

其工作流程如下:

  1. 创建接口文件:在织梦后台,你创建一个PHP文件(my_custom_api.php),并编写采集逻辑。
  2. 配置采集任务:在织梦采集器中,创建一个新的采集任务。
  3. 选择接口模式:在任务配置中,选择“自定义接口”作为数据来源。
  4. 填写接口地址:指向你刚刚创建的PHP文件路径。
  5. 执行采集:织梦采集器会访问这个PHP文件,你的代码被执行,并返回一个包含文章列表或文章详细信息的JSON。
  6. 解析与入库:织梦根据你返回的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等)。
  • 字段值的两种方式
    1. 提供URL:如果你的字段值(如标题、正文)需要从详情页获取,就直接把详情页的URL赋值给该字段,织梦在采集时会自动访问这个URL并根据该字段的规则进行抓取。
    2. 直接赋值:如果你在接口中已经处理好了数据(比如从API返回的JSON里解析出了标题),就直接把处理好的字符串赋值给该字段。
  • cURL:在自定义接口中,cURL是模拟HTTP请求最常用的工具,尤其适合处理登录、API调用等场景。

步骤2:在织梦后台配置采集任务

  1. 进入采集管理:登录织梦后台 -> 核心 -> 采集 -> 采集管理。
  2. 新建任务:点击“增加新任务”。
  3. 填写基本信息
    • 任务名称:给你的任务起个名字,如“知乎文章采集”。
    • 目标任务网址:这里可以随便填一个,因为数据来源是自定义接口。
  4. 选择数据来源
    • 在“选择数据来源”部分,选择 “自定义接口”
  5. 配置接口参数
    • 接口地址:填写你刚才创建的PHP文件的完整URL,https://www.yourdomain.com/dede/api/zhihu_article_api.php
    • 请求方式:通常是GET或POST,如果你的接口需要POST数据,就选择POST,并填写POST参数。
    • 请求头:如果目标网站需要特定的请求头(如User-Agent),可以在这里添加,格式为 key: value,每行一个。
  6. 配置采集字段
    • 这是最关键的一步,你需要告诉织梦,从接口返回的JSON中,哪个字段对应哪个文章属性。
    • 选择 title
    • 选择 body
    • 缩略图:选择 litpic
    • ...其他字段如作者、来源等,一一对应。
    • 注意:如果你的接口返回的title字段直接就是标题字符串,那么这里就不需要再配置抓取规则了,如果你的接口返回的是URL,那么就需要配置XPath或正则来从这个URL的页面中提取标题。
  7. 保存并测试
    • 保存任务。
    • 在任务列表中找到该任务,点击“开始采集”或“测试采集”,织梦会调用你的接口,并显示返回的数据,你可以在这里检查数据是否正确。

高级应用场景

  • 调用第三方API:如果你的数据源是一个提供JSON数据的API,你可以在自定义接口中使用file_get_contentscURL去请求这个API,解析返回的JSON,然后构造成织梦需要的格式。
  • 数据清洗与转换:在接口中,你可以使用PHP的字符串函数(str_replace, preg_replace等)或HTML解析库(Simple HTML DOM)对抓取到的内容进行清洗,比如删除无关广告、格式化代码、替换图片链接等。
  • 循环分页:你可以在接口代码中写一个循环,从第1页请求到第10页,将所有文章URL都收集起来,一次性返回给织梦。

注意事项

  1. 性能问题:自定义接口是在服务器端执行的,如果采集量很大或者接口逻辑复杂,可能会占用较多服务器资源,导致网站变慢,建议在非高峰期执行采集任务。
  2. 错误处理:在PHP代码中,最好加入try...catchif...else来判断请求是否成功,并返回错误信息,方便排查问题。
  3. 网站反爬:频繁的采集请求可能会触发目标网站的反爬机制,导致IP被封,请合理设置采集频率,并考虑使用代理IP。
  4. 文件权限:确保你创建的PHP文件所在目录有正确的读写权限(特别是保存Cookie的文件)。
  5. 遵守法律法规:采集他人网站内容时,务必遵守网站的robots.txt协议和相关的法律法规,尊重版权。

通过自定义接口,你可以将织梦采集器的能力发挥到极致,实现许多传统方式无法完成的复杂采集需求,它为高级用户提供了极大的自由度和控制力。

-- 展开阅读全文 --
头像
织梦如何调用自定义变量?
« 上一篇 04-22
dede如何插入地图?
下一篇 » 04-22

相关文章

取消
微信二维码
支付宝二维码

目录[+]