博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP类推荐:QueryList|基于phpQuery的无比强大的PHP采集工具
阅读量:6704 次
发布时间:2019-06-25

本文共 4698 字,大约阅读时间需要 15 分钟。

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

初探

看看PHP用QueryList做采集到底有多简洁吧!

array('jQuery选择器','要采集的属性'), 'image' => array('img','src') ))->data;//打印结果print_r($data);//采集某页面所有的超链接//可以先手动获取要采集的页面源码$html = file_get_contents('http://cms.querylist.cc/google/list_1.html');//然后可以把页面源码或者HTML片段传给QueryList$data = QueryList::Query($html,array( 'link' => array('a','href') ))->data;//打印结果print_r($data);/** * 在线测试采集并查看采集结果:http://querylist.cc/page-Querytest.html */

进阶

上面的采集结果有很多“杂质”,一定不会满足你的要求,来获取我们真正想要的结果。

array('.post_content img','src') ))->data;//打印结果print_r($data);//采集该页面文章列表中所有[文章]的超链接$data = QueryList::Query('http://cms.querylist.cc/google/list_1.html',array( 'link' => array('h2>a','href','',function($content){ //利用回调函数补全相对链接 $baseUrl = 'http://cms.querylist.cc'; return $baseUrl.$content;})),'.cate_list li')->data;//打印结果print_r($data);

全貌

正如你看到的那样,QueryList只有一个主要的方法Query,学会了使用Query方法也就意味着你已经熟练了QueryList!

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);

扩展

QueryList的功能很单一,就是Query,但扩展让QueryList变得无限可能!

'http://cms.querylist.cc/news/list_2.html', 'referrer'=>'http://cms.querylist.cc', 'method' => 'GET', 'params' => ['var1' => 'testvalue', 'var2' => 'somevalue'], 'user_agent'=>'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0', 'cookiePath' => './cookie.txt', 'timeout' =>'30' ])->setQuery(['link' => ['h2>a','href','',function($content){ //利用回调函数补全相对链接 $baseUrl = 'http://cms.querylist.cc'; return $baseUrl.$content;}]],'.cate_list li')->getData(function($item){ return $item['link'];});//多线程扩展QueryList::run('Multi',[ 'list' => $urls, 'curl' => [ 'opt' => array( CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_FOLLOWLOCATION => true, CURLOPT_AUTOREFERER => true, ), //设置线程数 'maxThread' => 100, //设置最大尝试数 'maxTry' => 3 ], 'success' => function($a){ //采集规则 $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 = 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($a['content'],$reg,$rang); $data = $ql->getData(); //打印结果,实际操作中这里应该做入数据库操作 print_r($data); }]);

转载于:https://blog.51cto.com/taoyouth/2301505

你可能感兴趣的文章
arm还是x86?未来在工业SBC数字谁可以脱颖而出
查看>>
Mybatis成为首选持久框架的原因
查看>>
SAP利用内表删除多条数据(自定义表)
查看>>
电脑上卸载软件的残留文件怎么清理?
查看>>
Android 初始化Menu item的值(ActionBar篇)
查看>>
Facebook和Google服务全球大瘫痪,网友:全世界只剩下推特 ...
查看>>
不让「数据孤岛」成为 AI 发展的绊脚石,「联邦学习」将成突破口? ...
查看>>
阿里云大数据ACP认证知识点梳理9——产品特点(DATA WORKS) ...
查看>>
首发 | 完成近亿美元B轮融资,黑芝麻如何成为自动驾驶芯片破局者?
查看>>
AI通过儿童眼球运动,筛查胎儿酒精谱系障碍
查看>>
【资料下载】Python第四讲——使用IPython/Jupyter Notebook与日志服务玩转超大规模数据分析与可视化...
查看>>
用不到 30 行 Python 代码实现 YOLO
查看>>
云HBase备份恢复,为云HBase数据安全保驾护航
查看>>
Ubuntu16.04上通过kubeadm安装指定版本Kubernetes1.9.0
查看>>
Intellij IDEA Jrebel Plugin 激活服务
查看>>
用Mockplus教你使用属性面板的设置交互状态
查看>>
让旧手机运行 Android O? 看看 Android Go 是如何做到的
查看>>
Zabbix SNMP监控安装、配置与服务器实例(学习笔记六)
查看>>
CocoaPods 1.7.0 Beta 发布,Xcode 依赖库管理
查看>>
学习讲述
查看>>