站三界导航
首页 TP代码FastAdmin和QueryList框架实现后台自动采集的示例代码

FastAdmin和QueryList框架实现后台自动采集的示例代码

  • TP代码
  • 来源:站三界导航
  • 62阅读
  • 2023-05-23

在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的菜单栏中,你就可以看到采集任务菜单,点击“执行任务”操作即可执行采集任务了。

本文结束
本文来自投稿,不代表站三界导航立场,如若转载,请注明出处:https://www.zhansanjie.com/article/details/43670.html

版权声明:

1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

2、本站仅提供信息发布平台,不承担相关法律责任。

3、若侵犯您的版权或隐私,请联系本站管理员删除。

4、本文由会员转载自互联网,如果您是文章原创作者,请联系本站注明您的版权信息。

分享
站三界导航
本站声明:本站严格遵守国家相关法律规定,非正规网站一概不予收录。本站所有资料取之于互联网,任何公司或个人参考使用本资料请自辨真伪、后果自负,站三界导航不承担任何责任。在此特别感谢您对站三界导航的支持与厚爱。