源码地址:https://github.com/LeeToug/NewsGather

最近公司需要做一个信息发布网站,任务分配下来之后确定我来主导这个项目。由于之前做小说采集网站的时候多用的是CMS自带的采集系统,但是本人实在不怎么感冒cms,所以在网上查看了一些资料,很神奇的找到了Querylist这个东西,今天就将我昨晚这次项目的里程分享一下。

首先,querylist官网(http://www.querylist.cc),直接点击文档走起。

大概看了一下,可以满足我的需求。okay,thinkphp5框架搭起来,使用composer安装querylist,安装之后本地出现gaegar文件夹,进去之后就会看到querylist了。至此,完成了安装的步骤啦,就是这么简单!!!

接下来就是使用Querylist类啦,一步一步来走:

首先引入类

use QL\QueryList;

然后重点

        $html = "http://www.***.com";//选择大的区域$selector = "body";//获取当前所选区域html$content=QueryList::get($html)->find($selector)->html();//最外层规则筛选$rules = array('plist' => ['dt','html']);//获取分类数据、处理/采集数据$data = $this->dealData($content,$rules);

$html是你要采集的目标站点,$content是获取到的html页面源码,$rules是即将要用的筛选规则。主要看一下处理数据的方法dealData();

public function dealData($content,$rules){$data = QueryList::html($content)->rules($rules)->range('')->queryData(function ($item){$item = QueryList::html($item)->rules(array('title' => array('a','text'),'original_link' =>array('a','href')))->range('')->queryData();return $item;});return $data;}

该方法中由于我要采集的目标站需要两层进去,所以又写了一次内部回调。将之前获取到的页面源码$content放入html()方法中去,使用rules()方法匹配dt标签中的html源码,range()方法是分片的,我这里没有用到,就留空,但是这个方法一定要写在这儿。在回调中,将之前获取到的html源码定在在$item中,然后进行二次rule规则筛选,将原站中的标题与链接采集到,此时的$item中就已经保存了我们想要的数据了,然后我们就可以将数据存库或是做其他处理了。

至此,一次简单的采集就完成了。

后附多线程采集的源码,原理与上面一样,需要注意的是,多线程采集时,需要引入对应的类,看下,如果大家有需要的话,我会再写一篇关于querylist多线程采集的文章。

use QL\QueryList;
use QL\Ext\CurlMulti;
use think\Db;class Gather extends Admin
{/*** @throws \think\db\exception\DataNotFoundException* @throws \think\db\exception\ModelNotFoundException* @throws \think\exception\DbException* 采集文章信息* @author lyf* @date 2019-5-10*/public function index(){$param=$this->request->get();$ql = QueryList::getInstance();$ql->use(CurlMulti::class);$htmls = array();$map['status'] = 0;$html = Db::name('city_cate_url')->where($map)->order("id","ASC")->limit("0","10")->select();foreach ($html as $item){$url = explode('/',$item['url']);$link = explode('.',$url[3]);$htmls[] = $url[0].'//'.$url[2].'/'.$link[0].'P'.$item['page'].'.'.$link[1];}$data = $this->gather($htmls,$ql);$ids=array_column($html,"id");$res_list=db("city_cate_url")->where("id","in",$ids)->where('status','-1')->select();$k=0;if($htmls){$k++;if($res_list){$this->success("正在采集第{$k}次","gather/index","",60);}else{$this->success("正在采集第{$k}次","gather/index","",30);}}else{$this->success("采集成功");}}/*** @param $html* @param $city_name* @param $cate_name* @param $num* @return string* 采集列表信息* @author lyf* @date 2019-5-8*/public function gather($html,$ql){$ql->curlMulti($html)->success(function (QueryList $ql,CurlMulti $curl,$r){
//            echo $r['info']['url'];echo "<br>";//初始化$content1 = '';$content2 = '';//获取城市ID$city = explode('/',$r['info']['url']);$cityId = $this->getCityId($city[0].'//'.$city[2].'/');$msg = '';$selector1 = "#main";$selector2 = "tbody";try{$content1=$ql->get($r['info']['url'])->find($selector1)->html();$content2=$ql->get($r['info']['url'])->find($selector2)->html();}catch(\Exception $e) {}$rules = ['title' => ['.t>div>a','title'],'original_link' => ['.t>div>a','href'],'img' => ['.i>a>img','src'],'brief' => ['.t>div','html','-#wrapv1'],'price' => ['.p','text'],'date' => ['.u','text']];if($content1&&$content2){//处理数据信息$data = $this->dealData($content2,$rules,$ql,$cityId,$r['info']['url']);//数据入库if($data){$res = $this->saveData($data,$r['info']['url']);}}else if($content1&&!$content2){$this->endNow($r['info']['url'],$status='1');}else{$this->endNow($r['info']['url'],$staus='-1');}$ql->destruct();})->start([// 最大并发数,这个值可以运行中动态改变。'maxThread' => 10,// 触发curl错误或用户错误之前最大重试次数,超过次数$error指定的回调会被调用。'maxTry' => 3,// 全局CURLOPT_*'opt' => [CURLOPT_TIMEOUT => 10,CURLOPT_CONNECTTIMEOUT => 1,CURLOPT_RETURNTRANSFER => true]]);}

源码地址:git:https://github.com/LeeToug/NewsGather

第一次在这边发博客,大家有什么不满意的地方,可以随时指正,也希望大家多多包涵。有问题随时可以私我,看到的话一定会回复哒

简单记录thinkphp5使用Querylist插件做采集相关推荐

  1. php querylist query,thinkphp5使用QueryList实现采集功能

    thinkphp5使用QueryList实现采集功能 龙行    PHP    2019-5-10    1631    0评论 QueryList是基于phpQuery的 1.下载`QueryLis ...

  2. WordPress插件蜜蜂采集最新(2022-2-16)漏洞(XSS, WordPress用户名暴露,任意文章发布)复现

    本次漏洞是WordPress的一款文章采集插件:蜜蜂采集,未对实现插件功能的相关API做鉴权:导致任何人发送的请求都会被执行. 下载漏洞复现环境:https://pan.baidu.com/s/1Oh ...

  3. (超简单)ESP8266深度睡眠模式下远程采集温湿度信息

    (超简单)ESP8266深度睡眠模式下远程采集温湿度信息 项目背景 相关技术 ESP8266深度睡眠模式 DHT11温湿度采集 MQTT数据收发 Node.js前后端实现 后端 前端 项目背景 自己用 ...

  4. CMU15445 2020 B+TREE简单记录

    CMU15445 2020 B+TREE 前期准备 check point1简单记录 check point2简单记录 删除 迭代器 并发 lab地址 前期准备 做完了2021的15445,想做一下2 ...

  5. [osg]osgDB的加载机制,使用3DS插件做参考(转,整理现有osgDB资料)

    参考:http://blog.sina.com.cn/s/blog_7cdaf8b60102uzu3.html http://blog.csdn.net/wang15061955806/article ...

  6. unity2D动画-角色切片与2DAnimation插件做动画

    unity2D动画-角色切片做动画 写在前面的话 开发环境与准备 用角色切片做动画 终于可以Key动画了 2DAnimation插件做动画 总结 写在前面的话 更新 建议有复杂2D动画需求的话用spi ...

  7. 简单记录双系统安装Ububtu22.04

    简单记录双系统安装Ububtu22.04 tag: #Linux #Ubuntu 双系统安装Ububtu22.04 设备:R9000P 2021 系统:win11 + ubuntu22.04 1.制作 ...

  8. 关于majaro安装后的配置,简单记录 机型华硕FZ53v

    关于majaro安装后的配置,简单记录 机型华硕FZ53v 关于majaro安装后的配置,简单记录 机型华硕FZ53v 关于majaro安装后的配置,简单记录 机型华硕FZ53v ##关于v2ray配 ...

  9. 一个简单的 jQuery 图片裁剪插件----cropper

    浏览器支持 Chrome (latest 2) Firefox (latest 2) Internet Explorer 8+ Opera (latest 2) Safari (latest 2) C ...

最新文章

  1. c#中byte数组0x_c# byte数组各种操作
  2. as工程放到源码编译_关于AS高版本SDK编译生成的apk放入低版本android源码中集成编译...
  3. 企业中书写css,web前端开发企业级CSS常用命名,书写规范总结(示例代码)
  4. vue-js 特殊变量$event常识
  5. mysql column legnth too big for_Column length too big for column 'Flist' (max = 21845);
  6. android webview简单使用,android WebView 简单使用Demo
  7. python做视频抽帧图_python-opencv-视频截取帧图片
  8. 计算机数据库系统考研复试面试题,2016年山西财经大学081203计算机应用技术871数据库系统概论复试笔试最后押题五套卷...
  9. 详细讲解深层神经网络DNN
  10. 用HTML+CSS做一个漂亮简单的个人网页
  11. C#实现将文件、文件夹压缩为压缩包
  12. 阿里云注册商标现身说法成功率打在公屏上
  13. 萌新的linux之旅27
  14. [Python] python + selenium 抓取 京东商品数据(商品名称,售价,店铺,分类,订单信息,好评率,评论等)
  15. GraphicsLab Project之基于物理的着色系统(Physical based shading) - 基于图像的光照(Image Based Lighting)(Diffuse篇)
  16. Ice飞冰目录结构应用入口工程配置路由配置《四》
  17. oracle-DDL对表的操作
  18. Flink 流数据处理
  19. pandas计算方差,平均值,分位数,中位数
  20. 下载anaconda前需要卸载python吗_装了anaconda要卸载python吗

热门文章

  1. 计算机网络专业土味情话,大学生新兵写给军营的“土味情话”,请各专业对号入座!...
  2. wifi信息流如何做?联系谁?
  3. Mac系统下安装MySQL和Navicat
  4. 读取INRIA 说明文件 生成 voc xml python 版本
  5. 我的ON BEACH生活 ———捡贝壳(一)
  6. 风机负载下无刷直流电机数学建模及闭环速度控制simulink仿真
  7. Elasticsearch:使用 fuzziness 来进行搜索
  8. java 给微信发消息_(新版)通过java程序,给微信发送消息
  9. 深度学习论文导航 | 17 EfficientNet:重新思考卷积神经网络模型缩放
  10. Windows ,