[EMLOG采集]简单、强大的采集工具

  • 内容
  • 相关

0ed11474681188.png

QueryList的出现让PHP做采集从未如此简单。得益于phpQuery(一款强大的选择器插件,支持检索、多选),让使用QueryList几乎没有任何学习成本,只要会CSS3选择器就可以轻松使用QueryList了,和jQuery选择器用法完全通用,它让PHP做采集像jQuery选择元素一样简单。

<?php
/**
 * 下面来完整的演示采集一篇文章页的文章标题、发布日期和文章内容
 */

 //引入自动加载文件
require 'vendor/autoload.php';
/**
 * 或者手动引入
 * 
 * 引入QueryList依赖
 * require 'QueryList/phpQuery.php';
 * 引入QueryList
 * require 'QueryList/QueryList.php';
 */

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 = 'image/'.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);

在QueryList3中,做出的调整如下:
1.调整参数,不再兼容以前版本
2.使用psr-4
3.使用composer
4.更改属性名jsonArr为data
5.废弃getJson方法
6.加入getData、getHtml、getInstance以及run方法
7.加入扩展功能,通过扩展可以实现多线程批量采集,模拟登陆采集等功能,让QueryList变得无限可能。
8.改进还有诸如:进一步降低了乱码出现的几率、增强了内置的源码抓取方法、实现无限级别嵌套采集等。

如何使用QueryList?

-在GitHub上下载到QueryList.phpphpQuery.php

-手动引入这两个文件到你的项目中

<?php
require 'phpQuery.php';
require 'QueryList.php';
use QL\QueryList;
$hj = QueryList::Query('http://mobile.csdn.net/',array("url"=>array('.unit h1 a','href')));
$data = $hj->getData(function($x){
    return $x['url'];
});
print_r($data);
[EMLOG采集]简单、强大的采集工具
         本页正文内容约1858个文字
         本文标签:

         版权声明:若无特殊注明,本文皆为“懒人的小窝”原创,转载请保留文章出处。

         本文链接:https://suppore.cn/260.html   百度已收录

发表评论

电子邮件地址不会被公开, 推荐使用QQ快速评论!

评论

4条评论
  1. avatar

    Jming Lv.1 Sogou Explorer Sogou Explorer Windows 7 x64 Edition Windows 7 x64 Edition 回复

    看了半天鸟都没看懂

    广东省惠州市 电信

    1. avatar

      浮夸小生。 Lv.2 Chrome 55.0.2883.87 Chrome 55.0.2883.87 Windows Windows 回复

      怎么用????

      四川省绵阳市 电信

      1. avatar

        哦耶涅 Lv.1 Chrome 40.0.2214.89 Chrome 40.0.2214.89 Windows Server 2003 Windows Server 2003 回复

        模版是博主自己独立制作的吗?

        广东省深圳市 移动

        1. 小陈 Chrome 59.0.3071.115 Chrome 59.0.3071.115 Windows Windows 回复

          回复了哦耶涅:没有哦。

                湖南省邵阳市 电信

      00:00 / 00:00
      顺序播放