当前位置: 首页 > java >正文

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

ThinkPHP8中使用QueryList

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

一、‌安装QueryList‌

通过Composer安装最新版QueryList:

composer require jaeger/querylist

二、‌基础采集示例

引用QueryList;

use QL\QueryList;public function crawl(){//采集百度搜索结果列表的标题和链接:// $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 function count()
{return count($this->cookies);
}
#[\ReturnTypeWillChange]
public function getIterator()
{return new \ArrayIterator(array_values($this->cookies));
}

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

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

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

三、采集结果

在这里插入图片描述

http://www.xdnf.cn/news/12888.html

相关文章:

  • 精准截流SOP:高效流量转化的实战指南
  • HTML5实现简洁的体育赛事网站源码
  • node.js的初步学习
  • 【会员专享数据】2017-2024年我国分省的10米精度土地覆盖数据
  • 【GESP真题解析】第 18 集 GESP 三级 2025 年 3 月编程题 1:2025
  • 校园网背后的技术:如何实现全校覆盖与无缝漫游?
  • 【RAG召回】bge实现向量相似度索引
  • 碳排放智能分析与优化系统:工业减排的革命性突破
  • 【题解-洛谷】P1506 拯救oibh总部
  • MySQL之索引
  • 为什么线性回归的损失函数采用均方误差?——基于最大似然估计的深度解析
  • 使用rufus-4.3制作系统盘
  • 02-VMware创建与安装CentOS7详解
  • Axure Rp 11 安装、汉化、授权
  • 【和春笋一起学C++】(十八)C++函数新特性——引用变量用作函数参数
  • RabbitMQ 各类交换机
  • 台湾TEMI协会竞赛——0、竞赛介绍及开发板介绍
  • 10万QPS高并发请求,如何防止重复下单
  • 驭码CodeRider 2.0产品概述和快速入门
  • 【AIGC】RAGAS评估原理及实践
  • OD 算法题 B卷【模拟工作队列】
  • 互联网协议IPv6
  • 电工基础【9】万用表使用、维修查找思路
  • BeckHoff_FB --> SET SNR 功能块
  • agent基础概念
  • android binder(四)binder驱动详解2
  • 【C/C++】namespace + macro混用场景
  • 医院药品管理系统
  • javaSE复习(7)
  • 第四讲 进程控制