[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);
点赞
X
赞助一下:
    支付宝    微信    QQ红包

打开支付宝扫一扫
[EMLOG采集]简单、强大的采集工具
本文标签:
版权声明:若无特殊注明,本文皆为“懒人的小窝”原创,转载请保留文章出处。
本文链接:http://suppore.cn/260.html   百度已收录

发表评论

电子邮件地址不会被公开。 必填项已用*标注

00:00 / 00:00
顺序播放