ThinkPHP8中使用QueryList—QueryList 简洁、优雅、可扩展的PHP采集工具(爬虫)

ThinkPHP8中使用QueryList

  • 一、‌安装QueryList‌
  • 二、‌基础采集示例
  • 三、采集结果

一、‌安装QueryList‌

通过Composer安装最新版QueryList:

composer require jaeger/querylist

二、‌基础采集示例

引用QueryList;

use QL\QueryList;

public functioncrawl(){
	 //采集百度搜索结果列表的标题和链接:
     // $data= QueryList::get('http://www.baidu.com/s?wd=QueryList')
     //     // 设置采集规则
     //     ->rules([
     //         'title'=>array('h3','text'),
     //         'link'=>array('h3>a','href')
     //     ])
     //     ->query()->getData();
     // dd($data->all());
     //采集「昵图网」所有图片地址
$img=QueryList::get('http://www.nipic.com')->find('img')->attrs('src');
     dd($img);
}

由于PHP 8.1及以上版本的严格类型检查导致的兼容性问题,具体表现为GuzzleHttp的CookieJar类实现了IteratorAggregate接口,但其getIterator()方法以及count()的返回类型声明与接口不兼容,会导致报错,有以下解决方案供参考:

CookieJar文件路径:/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php

‌1,降级PHP版本‌:
将PHP版本降级到8.0或以下可以暂时解决这个问题。

2‌,修改代码‌(临时解决方案):
在CookieJar类的count()和getIterator()方法上添加#[\ReturnTypeWillChange]属性来临时抑制这个通知。修改后的代码应该类似:

#[\ReturnTypeWillChange]
public functioncount()
{
return count($this->cookies);
}
#[\ReturnTypeWillChange]
public functiongetIterator()
{
return new \ArrayIterator(array_values($this->cookies));
}

3,‌更新依赖库‌(长期解决方案):
检查并更新GuzzleHttp库到最新版本,因为新版本可能已经修复了这个兼容性问题。

4,严格类型声明‌(长期解决方案):
修改方法签名以符合接口要求

public function getIterator(): \Traversable
{
return new \ArrayIterator($this->cookies);
}

三、采集结果

20250922081133987-image

 

🎀 🌸

📜 重要提示:
如有解压密码:看下载页、看下载页、看下载页。
源码工具资源类具有可复制性: 建议具有一定思考和动手能力的用户购买。
请谨慎考虑: 小白用户和缺乏思考动手能力者不建议赞助。
虚拟商品购买须知: 虚拟类商品,一经打赏赞助,不支持退款。请谅解,谢谢合作!
邻兔跃官网:lt.lintuyue.com(如有解压密码看下载页说明)。

文章版权声明 1、本网站名称:邻兔跃lT
2、本站永久网址:https://lt.lintuyue.com/
3、本站内容主要来源于互联网优质资源整合、网友积极投稿以及部分原创内容,仅供内部学习研究软件设计思想和原理使用,学习研究后请自觉删除,请勿传播,因未及时删除所造成的任何后果责任自负,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容