- 145浏览
- 2022-05-08
在FastAdmin中创建一个名为“采集”(Collect)的模型(model),并添加需要采集的字段。例如,我们可以添加如下字段:
<?php
namespace app\admin\model;
use think\Model;
class Collect extends Model
{
protected $name = 'collect'; // 数据表名
protected $autoWriteTimestamp = true; // 自动写入时间戳字段
// 定义数据表字段
protected $schema = [
'id' => 'int',
'title' => 'string',
'url' => 'string',
'content' => 'text',
'update_time' => 'datetime',
'create_time' => 'datetime',
'status' => 'int',
];
}
创建一个名为“采集源”(Source)的模型,并添加需要采集的字段。例如,我们可以添加如下字段:
<?php
namespace app\admin\model;
use think\Model;
class Source extends Model
{
protected $name = 'collect_source'; // 数据表名
protected $autoWriteTimestamp = true; // 自动写入时间戳字段
// 定义数据表字段
protected $schema = [
'id' => 'int',
'name' => 'string',
'url' => 'string',
'content_selector' => 'string',
'url_selector' => 'string',
'title_selector' => 'string',
'status' => 'int',
'update_time' => 'datetime',
'create_time' => 'datetime',
];
}
在FastAdmin中创建一个名为“采集”(Collect)的控制器(controller),并添加如下方法:
<?php
namespace app\admin\controller;
use think\Controller;
use QL\QueryList;
class Collect extends Controller
{
/**
* 执行采集任务
*/
public function execute()
{
// 获取所有启用状态的采集源
$sources = model('Source')
->where('status', 1)
->select();
// 遍历所有采集源,执行采集任务
foreach ($sources as $source) {
$html = file_get_contents($source->url); // 采集页面内容
// 使用QueryList解析HTML页面
$data = QueryList::html($html)
->find($source->content_selector)
->map(function ($item) use ($source) {
return [
'title' => $item->find($source->title_selector)->text(),
'url' => $item->find($source->url_selector)->attr('href'),
];
})
->toArray();
// 遍历采集结果,保存到数据库中
foreach ($data as $item) {
$collect = new \app\admin\model\Collect();
$collect->title = $item['title'];
$collect->url = $item['url'];
$collect->status = 1;
$collect->save();
}
}
$this->success('执行任务成功');
}
}
在这个方法中,我们首先获取所有启用状态的采集源,然后遍历所有采集源,执行采集任务。我们使用file_get_contents函数从采集源的URL地址中获取页面内容,并使用QueryList库对页面内容进行解析。最后,我们遍历采集结果,并将每个结果保存到数据库中。在FastAdmin中创建一个名为“采集任务”(Task)的菜单,并添加一个名为“执行任务”(Execute)的操作,为该操作绑定Collect控制器中的execute方法。
<?php
return [
'name' => '采集任务',
'icon' => 'fa fa-cloud-download',
'children' => [
[
'name' => '执行任务',
'act' => 'collect/execute',
'icon' => 'fa fa-play',
],
],
];
这样,在FastAdmin的菜单栏中,你就可以看到采集任务菜单,点击“执行任务”操作即可执行采集任务了。
版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、本文由会员转载自互联网,如果您是文章原创作者,请联系本站注明您的版权信息。