- Get Started
- 基础
- 进阶
- 技巧
- 插件推荐
- API
- Get Started
- 基础 API
- QueryList html($html)
- string getHtml($rel = true)
- QueryList rules(array $rules)
- QueryList range($selector)
- QueryList removeHead()
- QueryList query(Closure $callback = null)
- Collection getData(Closure $callback = null)
- Array queryData(Closure $callback = null)
- QueryList static getInstance()
- void destruct()
- void destructDocuments() 静态方法
- QueryList pipe(Closure $callback)
- 特殊 API
- 高级 API
- 默认插件
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
递归多级采集
可以在getData()
方法中多次调用QueryList来实现递归多级采集。
使用场景:如采集多级菜单,需要先采集第一级菜单,然后采集第二级菜单,以此类推。
示例
采集代码:<?php
require 'QueryList/vendor/autoload.php';
use QL\QueryList;
//获取每个li里面的h3标签内容,和class为item的元素内容
$html =<<<STR
<div id="demo">
<ul>
<li>
<h3>xxx</h3>
<div class="list">
<div class="item">item1</div>
<div class="item">item2</div>
</div>
</li>
<li>
<h3>xxx2</h3>
<div class="list">
<div class="item">item12</div>
<div class="item">item22</div>
</div>
</li>
</ul>
</div>
STR;
$data = QueryList::html($html)->rules(array(
'title' => array('h3','text'),
'list' => array('.list','html')
))->range('#demo li')->queryData(function($item){
// 注意这里的QueryList对象与上面的QueryList对象是同一个对象
// 所以这里要重置range()参数,否则会共用前面的range()参数,导致出现采集不到结果的诡异现象
$item['list'] = QueryList::html($item['list'])->rules(array(
'item' => array('.item','text')
))->range('')->queryData();
return $item;
});
print_r($data);
采集结果:Array
(
[0] => Array
(
[title] => xxx
[list] => Array
(
[0] => Array
(
[item] => item1
)
[1] => Array
(
[item] => item2
)
)
)
[1] => Array
(
[title] => xxx2
[list] => Array
(
[0] => Array
(
[item] => item12
)
[1] => Array
(
[item] => item22
)
)
)
)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论