zoukankan      html  css  js  c++  java
  • querylist采集 爬虫

    一、安装

    通过Composer安装:

    composer require jaeger/querylist
    

    官方参考文档:https://querylist.cc/docs/guide/v3/installation

    二、本次主要运用下载到本地的querylist包来进行诠释

    1.将querylist包解压到本地,放在本地框架的pubilc文件夹下(phpQuery.php    Querylist.php 两个主要文件)

    2.创建控制器,并在控制器中引入querylist的命名空间 

     3.控制器代码

        public function index()
        {
            //引入采集文件
            require "QueryList/QueryList.php";
            require "QueryList/phpQuery.php";
            //设置采集的地址
            $url="https://www.17k.com/";
            //设置采集规则
            $rules = array(
                //采集id为one这个元素里面的纯文本内容
                'title' => array('dd>h3>a','text'),
                //采集class为two下面的超链接的链接
                'content' => array('dd>.info>a','text'),
                //采集class为two下面的第二张图片的链接
                'img' => array('dd>a>img','src'),
                //采集span标签中的HTML内容
                'anthor' => array('dd>.author>a','text')
            );
            //采集数据
            $data=@ QueryList::Query($url,$rules)->data;
            //未采集到数据处理
            foreach ($data as $k=>$v){
                $data[$k]['title']=empty($v['title'])?'未采集到数据':$v['title'];
                $data[$k]['content']=empty($v['content'])?'未采集到数据':$v['content'];
                $data[$k]['img']=empty($v['img'])?'未采集到数据':$v['img'];
                $data[$k]['anthor']=empty($v['anthor'])?'未采集到数据':$v['anthor'];
            }
    //将线上图片保存到本地文件夹中 foreach ($data as $k=>$v){ $img=file_get_contents($v['img']); $fileimg='uploads/'.time().rand(1,999).substr($v['img'],strrpos($v['img'],".")); file_put_contents($fileimg,$img); $data[$k]['img']=$fileimg; } //添加入库 model('Book')->insertAll($data); $data=Book::paginate(5); if ($data){ return view('lists',['data'=>$data]); }else{ return "<script>alert('添加失败')</script>"; }

     或者   tp 中

     1 <?php
     2 
     3 namespace appartcontroller;
     4 
     5 use appartmodelUser;
     6 use thinkController;
     7 use thinkRequest;
     8 use QLQueryList;
     9 class Article extends Controller
    10 {
    11     /**
    12      * 显示资源列表
    13      *
    14      * @return 	hinkResponse
    15      */
    16     public function index()
    17     {
    18         //
    19         require "QueryList/QueryList.php";
    20         require "QueryList/phpQuery.php";
    21         //设置采集地址
    22         $url = 'https://www.cnbeta.com/';
    23 
    24 // 采集规则
    25         $rules = [
    26             // 文章标题
    27             'title' => ['.item>dl>dt>a','text'],
    28             // 文章简介
    29             'content' => ['.item>dl>dd>p','text'],
    30             // 图片
    31             'img' => ['.item>dl>a>img','src'],
    32             // 浏览量
    33             'browse' => ['.item>.meta-data>.status>li:nth-child(1)','text']
    34         ];
    35         $data = @QueryList::Query($url,$rules)->data;
    36         //处理未采集到的数据
    37         foreach ($data as $k=>$v){
    38             $data[$k]['title']=empty($v['title'])?"未采集到数据":$v['title'];
    39             $data[$k]['content']=empty($v['content'])?"未采集到数据":$v['content'];
    40             $data[$k]['img']=empty($v['img'])?"未采集到数据":$v['img'];
    41             $data[$k]['browse']=empty($v['browse'])?"未采集到数据":$v['browse'];
    42         }
    43         //将图片保存到本地
    44         foreach ($data as $k=>$v){
    45             $img=file_get_contents($v['img']);
    46             $fileimg='upload/'.time().rand(1,999)."."."jpg";
    47             file_put_contents($fileimg,$img);
    48             $data[$k]['img']=$fileimg;
    49         }
    50            //数据保存入库
    51 //        model('Article')->insertAll($data);
    52         if (model('Article')->insertAll($data)){
    53             $data=appartmodelArticle::select();
    54             return json(['code'=>200,'msg'=>'success','data'=>$data]);
    55         }else{
    56             return json(['code'=>200,'msg'=>'success','data'=>""]);
    57         }
    58 
    59     }

     4.剩下的就保存入库就可以了,tp框架中数组入库运用 insertAll         laravel框架见上图

    二:原生方法采集  多页采集

    <?php
    //引入
    require_once "./phpQuery.php"; require_once "./QueryList.php"; use QLQueryList; //多页面采集 单页可不写循环与rang $rang=range(1,3); foreach ($rang as $value){ $url="https://采集地址".$value."/"; //追加到数组中形成一个二维数组 采集规则 $data = @QueryList::Query($url,[ // 文章封面 'pic' => ['.lj-lazy','data-original','',function($item){ //得到扩展名 $ext=pathinfo($item,PATHINFO_EXTENSION); //生成文件名 $filename=rand(1,9999).time().'.'.$ext; //生成本地路径 $filepath=dirname(__DIR__).'/public/uploads/article/'.$filename; file_put_contents($filepath,file_get_contents($item)); return '/uploads/article/'.$filename; }], // 文章标题 'title' => ['.text>.LOGCLICK','text'], 'url' => ['.text>.LOGCLICK','href'], // 文章简介 'desn' => ['.summary','text'], ])->data; //入库保存数据 使用pdo $dbms='mysql'; //数据库类型 $host='localhost'; //数据库主机名 $dbName='数据库名'; //使用的数据库 $user='root'; //数据库连接用户名 $pass='root'; //对应的密码 $dsn="$dbms:host=$host;dbname=$dbName"; $pdo = new PDO($dsn, $user, $pass); //初始化一个PDO对象 foreach ($data as $val){ //书写SQL语句 $sql="insert into articles (title,pic,url,desn,body) values (?,?,?,?,?)"; //预处理 $stmt=$pdo->prepare($sql); //插入数据 $stmt->execute([$val['title'],$val['pic'],$val['url'],$val['desn'],'']); } } //可以低得到采集到的数据 print_r($data);
  • 相关阅读:
    扁平化职能管理三部曲
    [转载]持续交付和DevOps的前世今生
    敏捷项目管理工具-百度效率云
    敏捷项目管理:基础知识与应用实务
    第8章 “敏捷+”创新创业模式
    第7章 "敏捷+"项目管理
    第6章 迭代循环与项目结束
    第5章 发布循环
    第4章 立项与项目启动
    Windows 2003 + IIS6.0 相关 401.1 或 401.2 等问题解决
  • 原文地址:https://www.cnblogs.com/cyxng/p/14204357.html
Copyright © 2011-2022 走看看