• 技术文章 >php框架 >ThinkPHP

    Thinkphp5与QueryList实现采集页面功能(爬虫)

    藏色散人藏色散人2020-01-28 13:57:27转载1471

    QueryList 是什么?

    QueryList是一套用于内容采集的PHP工具,它使用更加现代化的开发思想,语法简洁、优雅,可扩展性强。相比传统的使用晦涩的正则表达式来做采集,QueryList使用了更加强大而优雅的CSS选择器来做采集,大大降低了PHP做采集的门槛,同时也让采集代码易读易维护,让你从此告别晦涩难懂且不易维护的正则表达式。

    QueryList 提供的一整套内容采集解决方案

    ● DOM内容选择:CSS选择器

    ● HTTP客户端:GuzzleHTTP

    ● 内容过滤:CSS选择器

    ● 解决乱码:内置多套乱码解决方案

    ● 额外功能:丰富的扩展插件

    前提

    项目主要用thinkphp5框架,主要会用到`QueryList.php`和`phpQuery.php`这两个文件。我们可以切换到项目目录,extend里新建QL,然后在QL目录执行composer命令安装QueryList:

    composer require jaeger/querylist

    然后在需要使用的控制器中加入 use QL\QueryList; 接下来就在控制器里编写代码了,以下是一个实例

    //需要采集的目标页面
    $page = 'http://cms.querylist.cc/news/566.html';
    //采集规则
    $reg = array(
       //采集文章标题
       'title' => array('h1','text'),
       //采集文章发布日期,这里用到了QueryList的过滤功能,过滤掉span标签和a标签
       'date' => array('.pt_info','text','-span -a',function($content){
           //用回调函数进一步过滤出日期
           $arr = explode(' ',$content);
           return $arr[0];
       }),
       //采集文章正文内容,利用过滤功能去掉文章中的超链接,但保留超链接的文字,并去掉版权、JS代码等无用信息
       'content' => array('.post_content','html','a -.content_copyright -script',function($content){
           //利用回调函数下载文章中的图片并替换图片路径为本地路径
           //使用本例请确保当前目录下有image文件夹,并有写入权限
           //由于QueryList是基于phpQuery的,所以可以随时随地使用phpQuery,当然在这里也可以使用正则或者其它方式达到同样的目的
    
           $doc=\phpQuery::newDocumentHTML($content);
           $imgs = pq($doc)->find('img');
           foreach ($imgs as $img) {
               $src = 'http://cms.querylist.cc'.pq($img)->attr('src');
               $localSrc = md5($src).'.jpg';
               $stream = file_get_contents($src);
               file_put_contents($localSrc,$stream);
               pq($img)->attr('src',$localSrc);
           }
           return $doc->htmlOuter();
       })
    );
    $rang = '.content';
    $ql = QueryList::Query($page,$reg,$rang);
    $data = $ql->getData();
    //打印结果
    print_r($data);

    注意:

    在使用phpQuery类时需要在前面加上\,因为phpQuery.php中没有使用命名空间,因为使用命名空间后,QueryList.php无法使用phpQuery类。

    更多相关ThinkPHP知识,请访问ThinkPHP教程

    以上就是Thinkphp5与QueryList实现采集页面功能(爬虫)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:cnblogs,如有侵犯,请联系admin@php.cn删除
    专题推荐:Thinkphp5 QueryList
    上一篇:thinkphp如何调用sqlserver储存过程返回多个结果集 下一篇:Thinkphp框架对数据库的操作(总结)
    大前端线上培训班

    相关文章推荐

    • QueryList解析微信文章实例• php如何使用QueryList轻松采集js动态渲染页面?• php使用QueryList轻松采集JavaScript动态渲染页面• PHP使用QueryList轻松实现一个百度网盘资源搜索引擎

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网