QueryList的几个特点:
1.只有一个核心的API, 静态方法Query
2.用jQuery选择器来选择页面元素
3.自带过滤功能, 可过滤掉无用的内容
4.支持无限层级嵌套采集
5.采集结果直接以采集规则以列表的形式有序的返回
6.支持扩展
官方地址:https://querylist.cc/
引入到项目中
通过Composer安装的
只须要引入vendor/autoload.php文件就可以利用QueryList及其所有插件了(如果安装了插件的话)。
<?phprequire 'vendor/autoload.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);?>
手动安装的
手动下载phpQuery.php和QueryList.php这两个文件, 然夹帐动引入这两个文件就可以了。
<?phprequire '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);
开始利用
利用QueyList只须要编写规则库, 然后把规则库传给QueryList的静态方法Query, QueryList就会自动按照规则库把内容全部采集回来了, 而规则库是用jQuery选择器来编写的, 以是利用QueryList的全体过程非常大略!
规则库的编写规则如下(大略模式):
$rules = array(
'规则名' => array('jQuery选择器','要采集的属性'),
'规则名2' => array('jQuery选择器','要采集的属性'),
..........
);
1.采集目标, 下面的代码片段
$html = <<<STR<div id="one"><div class="two"><a href="http://querylist.cc">QueryList官网</a><img src="http://querylist.com/1.jpg" alt="这是图片"><img src="http://querylist.com/2.jpg" alt="这是图片2"></div><span>其它的<b>一些</b>文本</span></div>STR;
2.编写采集规则
rules = array(//采集id为one这个元素里面的纯文本内容'text' => array('#one','text'),//采集class为two下面的超链接的链接'link' => array('.two>a','href'),//采集class为two下面的第二张图片的链接'img' => array('.two>img:eq(1)','src'),//采集span标签中的HTML内容'other' => array('span','html'));
3.开始采集
$data = QueryList::Query($html,$rules)->data;//打印结果print_r($data);
结果如下:
Array([0] => Array([text] =>QueryList官网其它的一些文本[link] => http://querylist.cc[img] => http://querylist.com/2.jpg[other] => 其它的<b>一些</b>文本))
实例:采集物流数据
require 'QueryList/vendor/autoload.php';use QL\QueryList;$html = "http://www.icntgroup.com/aisen/courier_check?orderNumber=AS355951360006697";$express_rules = array('data_col' => array('.date_col','text'));$process_rules = array('id_col' => array('.id_col','text'),'duration_col' => array('.duration_col','text'),'name_col' => array('.name_col','text'));$express = QueryList::Query($html, $express_rules)->data;$process = QueryList::Query($html, $process_rules)->data;$data['express'] = $express;$data['process'] = $process;echo "<pre>";print_r($data);echo "<pre>";
显示结果如下:
Array([express] => Array([0] => Array([data_col] => 艾森单号:AS355951360006697)[1] => Array([data_col] => 顺丰单号:974692202230))[process] => Array([0] => Array([id_col] =>[duration_col] => 日期/韶光[name_col] => 物件状态)[1] => Array([id_col] =>[duration_col] => 2017-06-29 22:07:32[name_col] => 货色(contigo 儿童水杯(套装) x3,)已到达艾森国际蒙特利尔代收点。收件人:芦怡 电话:13942059005地址:辽宁省大连市沙河口区永生街同力巷12号 东北路小学)[2] => Array([id_col] => 0[duration_col] => 2017-06-29 18:53PM[name_col] => 货色已经到达艾森国际蒙特利尔分拣中央)[3] => Array([id_col] => 1[duration_col] => 2017-06-30 9:30AM[name_col] => 货色已经到达蒙特利尔国际机场)[4] => Array([id_col] => 2[duration_col] => 2017-07-01 3:30PM[name_col] => 货色离开蒙特利尔机场)[5] => Array([id_col] => 3[duration_col] => 2017-07-02 6:53PM[name_col] => 货色抵达北京国际机场)[6] => Array([id_col] => 4[duration_col] => 2017-07-03 6:53PM[name_col] => 货色抵达中国海关监管仓库)[7] => Array([id_col] => 5[duration_col] => 2017-07-04 9:30AM[name_col] => 货色清关中,等待放行后转交顺丰。)[8] => Array([id_col] => 6[duration_col] => 2017-07-07 20:24:51[name_col] => 顺丰速运 已收取快件)[9] => Array([id_col] => 7[duration_col] => 2017-07-07 20:25:01[name_col] => 快件在【天津东丽海淘业务部】已装车,准备发往 【天津东丽集散中央】)[10] => Array([id_col] => 8[duration_col] => 2017-07-07 20:26:46[name_col] => 在官网"运单资料&签收图",可查看签收人信息)[11] => Array([id_col] => 9[duration_col] => 2017-07-07 22:18:39[name_col] => 快件到达 【天津东丽集散中央】)[12] => Array([id_col] => 10[duration_col] => 2017-07-07 23:02:21[name_col] => 快件在【天津东丽集散中央】已装车,准备发往 【北京通州集散中央】)[13] => Array([id_col] => 11[duration_col] => 2017-07-08 02:30:19[name_col] => 快件到达 【北京通州集散中央】)[14] => Array([id_col] => 12[duration_col] => 2017-07-08 02:30:19[name_col] => 快件在【北京通州集散中央】已装车,准备发往下一站)[15] => Array([id_col] => 13[duration_col] => 2017-07-08 20:14:19[name_col] => 快件到达 【大连甘井子集散中央】)[16] => Array([id_col] => 14[duration_col] => 2017-07-09 01:12:48[name_col] =>)[17] => Array([id_col] => 15[duration_col] => 2017-07-09 02:33:30[name_col] => 快件在【大连甘井子集散中央】已装车,准备发往 【大连市西岗区北京公园业务点】)[18] => Array([id_col] => 16[duration_col] => 2017-07-09 07:19:12[name_col] => 快件到达 【大连市西岗区北京公园业务点】)[19] => Array([id_col] => 17[duration_col] => 2017-07-09 07:50:06[name_col] => 快件交给高云川,正在派送途中(联系电话:18241150051))[20] => Array([id_col] => 18[duration_col] => 2017-07-09 07:54:58[name_col] => 正在派送途中,请您准备签收)[21] => Array([id_col] => 19[duration_col] => 2017-07-09 07:55:19[name_col] => 快件交给高云川,正在派送途中(联系电话:18241150051))[22] => Array([id_col] => 20[duration_col] => 2017-07-09 10:00:13[name_col] => 已签收,感谢利用顺丰,期待再次为您做事)[23] => Array([id_col] => 21)))