采集工具:火车采集器(可以百度搜索一下这个工具的下载)
采集模块:新闻 News
第一步、编写采集入库脚本接口
新建:./api/caiji.php(应用于URL地址请求,大小写随意)
<?php
/**
* 数据采集
*/
define('IS_API', basename(__FILE__, '.php')); // 项目标识
define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME)); // 该文件的名称
require('../index.php'); // 引入主文件
新建:./dayrui/My/Api/Caiji.php(首字母必须大小,最终php文件命名与上面的名称保持相同)
<?php
$this->_module_init('news'); // news 是模块目录
if ($_GET['action'] == 'category') {
// 显示栏目
if (!$this->module['category']) {
echo '模块【'.$this->module['dirname'].'】没有创建栏目';
}
foreach ($this->module['category'] as $t) {
if ($t['child'] == 0 && $t['tid'] == 1) {
echo '<h1>'.$t['name'].'<=>'.$t['id'].'</h1>'.PHP_EOL;
}
}
} else {
// 入库数据
$data = $_REQUEST;
// 发布者id 1
$data['uid'] = 1;
// 发布者账号 admin
$data['author'] = 'admin';
// 主表字段
$fields[1] = $this->get_cache('table-'.SITE_ID, $this->content_model->dbprefix(SITE_ID.'_'.MOD_DIR));
$cache = $this->get_cache('table-'.SITE_ID, $this->content_model->dbprefix(SITE_ID.'_'.MOD_DIR.'_category_data'));
$cache && $fields[1] = array_merge($fields[1], $cache);
// 附表字段
$fields[0] = $this->get_cache('table-'.SITE_ID, $this->content_model->dbprefix(SITE_ID.'_'.MOD_DIR.'_data_0'));
// 去重复
$fields[0] = array_unique($fields[0]);
$fields[1] = array_unique($fields[1]);
// 格式化入库字段
// 一般是格式化非文本类的字段(例如多文件上传、复选框、联动字段等等)
// 这里需要按采集资料的格式入库格式化字段,
// 开始归类存储
$save = [];
// 主表附表归类
foreach ($fields as $ismain => $field) {
foreach ($field as $name) {
isset($data[$name]) && $save[$ismain][$name] = $data[$name];
}
}
if (!$data['catid']) {
exit('栏目为空');
}
$save[1]['uid'] = $save[0]['uid'] = $data['uid'];
$save[1]['catid'] = $save[0]['catid'] = $data['catid'];
$save[1]['url'] = '';
$save[1]['status'] = 9; //9表示正常发布,1表示审核里面
$save[1]['hits'] = 0;
$save[1]['displayorder'] = 0;
$save[1]['link_id'] = 0;
$save[1]['inputtime'] = $save[1]['updatetime'] = SYS_TIME + rand(0, 7200);
$save[1]['inputip'] = '127.0.0.1';
// 验证标题重复
if ($this->content_model->table(SITE_ID.'_'.MOD_DIR)->where('title', $save[1]['title'])->counts()) {
echo '重复';exit;
}
$rt = $this->content_model->save_content(0, $save);
if ($rt['code']) {
/*
// 用于发布成功后生成静态文件代码
dr_html_auth($_SERVER['SERVER_ADDR']);
dr_catcher_data(SITE_URL.'index.php?s='.MOD_DIR.'&c=html&m=showfile&id='.$rt['id']);
*/
exit('成功');
} else {
exit('失败');
}
}
exit;
脚本文件中可以定义发布者等一些预定义字段默认值,如果你不会php的话可以保持默认
注意:本脚本的程序代码只对内容等字段入库有效,由于采集目标网站的数据规范性无法做到统一;
如果开发者对其他字段(例如多文件上传、复选框、联动字段等等)需要开发者自己根据采集的实际情况来编写入库程序来组装入库的POST数据,需要PHP开发技术基础,下面来举一些基础例子。
1、多文件上传字段
$data['字段名称'] = dr_array2string([
['file'=>'文件路径', 'title'=>'标题'],
]);
2、复选框字段
$data['字段名称'] = dr_array2string([
'值1', '值2'
]);
测试规则地址:
http://你的网站/api/caiji.php?action=category
如果能显示出来栏目信息,说明ok了
如果显示api file is error,表示你./dayrui/My/Api/Caiji.php没有创建正确。
第二步、火车采集器编写web发布规则
第三步、新建一个在线发布模块
第四步、填写获取栏目列表的参数
/api/caiji.php?action=category
<h1>[分类名称]<=>[分类ID]</h1>
按照上面的格式写就ok了
第五步、内容发布规则参数
发布地址:/api/caiji.php?action=post
表单参数:这里是你采集的字段
c错误码:失败 回车符 重复
成功标志码:成功
表单参数:这里可以配置任意自定义字段的入库,不知道入库格式怎么办?
查看数据库储存数据格式进行入库处理,必要时需要在接口文件中重新编程
第六步、保存模块
第七步、然后返回web发布配置里面
按照图中的参数配置,点“获取栏目”,如果可以获取到就表示成功了一大半了
第八步、测试入库发布
第九步、后台查看采集内容