QueryList static getInstance()
注意:此方法获取到的是全局共享的单一QueryList实例,意味着如果涉及到想要多QueryList共存的场景就需要通过new QueryList()
的方式来获取QueryList实例,QueryList内置的所有静态方法都是调用getInstance()
方法获取的QueryList实例。
用法
- 基本用法
$ql = QueryList::getInstance();
$data = $ql->get('http://www.baidu.com/s?wd=QueryList')->find('h3 a')->texts();
print_r($data->all());
输出:
Array
(
[0] => QueryList|基于phpQuery的无比强大的PHP采集工具
[1] => QueryList|基于phpQuery的无比强大的PHP采集工具
[2] => 介绍- QueryList指导文档
[3] => QueryList一个基于phpQuery的无比强大的采集工具 - ThinkPHP框架
[4] => PHP 用QueryList抓取网页内容 - wb145230 - 博客园
[5] => thomasw/querylist · GitHub
[6] => thinkPHP3.2中使用QueryList采集演示 - ThinkPHP框架
[7] => JAE/QueryList - 码云
[8] => QueryList采集器2.0版本,附QueryList入门教程 - ThinkPHP框架
- 错误示范
可能某些情况下你需要共存多个QueryList实例,如下列设置了2个QueryList对象,由于QueryList::get()
方法默认是调用getInstance()
获取QueryList实例的,所以下面2个对象其实是同一个对象,所以打印结果相同。
$url1 = "https://www.baidu.com/";
$url2 = "https://www.bing.com/";
$ql1 = QueryList::get($url1);
//等价: $ql1 = QueryList::getInstance()->get($url1);
$ql2 = QueryList::get($url2);
$title1 = $ql1->find('title')->text();
$title2 = $ql2->find('title')->text();
echo $title1."\r\n".$title2;
打印结果:
微软 Bing 搜索 - 国内版
微软 Bing 搜索 - 国内版
正确写法:
$url1 = "https://www.baidu.com/";
$url2 = "https://www.bing.com/";
$ql1 = (new QueryList)->get($url);
$ql2 = (new QueryList)->get($url2);
$title1 = $ql1->find('title')->text();
$title2 = $ql2->find('title')->text();
print_r($title1);
print_r($title2);
打印结果:
百度一下,你就知道
微软 Bing 搜索 - 国内版