QueryList是一套用于内容采集的PHP工具,它使用更加现代化的开发思想,语法简洁、优雅,可扩展性强。相比传统的使用晦涩的正则表达式来作采集,QueryList使用了更增强大而优雅的CSS选择器来作采集,大大下降了PHP作采集的门槛,同时也让采集代码易读易维护,让你今后告别晦涩难懂且不易维护的正则表达式😀。php
前提html
项目主要用thinkphp5框架,主要会用到`QueryList.php`和`phpQuery.php`这两个文件。咱们能够切换到项目目录,extend里新建QL,而后在QL目录执行composer命令安装QueryList:正则表达式
composer require jaeger/querylist
而后在须要使用的控制器中加入 use QL\QueryList; 接下来就在控制器里编写代码了,如下是一个实例thinkphp
1 //须要采集的目标页面 2 $page = 'http://cms.querylist.cc/news/566.html'; 3 //采集规则 4 $reg = array( 5 //采集文章标题 6 'title' => array('h1','text'), 7 //采集文章发布日期,这里用到了QueryList的过滤功能,过滤掉span标签和a标签 8 'date' => array('.pt_info','text','-span -a',function($content){ 9 //用回调函数进一步过滤出日期 10 $arr = explode(' ',$content); 11 return $arr[0]; 12 }), 13 //采集文章正文内容,利用过滤功能去掉文章中的超连接,但保留超连接的文字,并去掉版权、JS代码等无用信息 14 'content' => array('.post_content','html','a -.content_copyright -script',function($content){ 15 //利用回调函数下载文章中的图片并替换图片路径为本地路径 16 //使用本例请确保当前目录下有image文件夹,并有写入权限 17 //因为QueryList是基于phpQuery的,因此能够随时随地使用phpQuery,固然在这里也能够使用正则或者其它方式达到一样的目的 18 19 $doc=\phpQuery::newDocumentHTML($content); 20 $imgs = pq($doc)->find('img'); 21 foreach ($imgs as $img) { 22 $src = 'http://cms.querylist.cc'.pq($img)->attr('src'); 23 $localSrc = md5($src).'.jpg'; 24 $stream = file_get_contents($src); 25 file_put_contents($localSrc,$stream); 26 pq($img)->attr('src',$localSrc); 27 } 28 return $doc->htmlOuter(); 29 }) 30 ); 31 $rang = '.content'; 32 $ql = QueryList::Query($page,$reg,$rang); 33 $data = $ql->getData(); 34 //打印结果 35 print_r($data);
注意:在使用phpQuery类时须要在前面加上\,由于phpQuery.php中没有使用命名空间,由于使用命名空间后,QueryList.php没法使用phpQuery类。
以上是一个简单的例子,已经实现了采集网页数据,更多详细语法与实例能够移步到官网文档,细细查看composer
QueryList参考文档:https://doc.querylist.cc/