php use 报错,Querylist 报错 错误报告Document with ID ’67ca6e7b6472494a20aff43a4739ab59′ isn’t loaded. Use ph...

问题原因:因为循环调用静态的QueryList,但是每次调用的静态get方法都会创建新的phpQuery对象,导致积压在内存中,内存爆了,就存不了新爬到的内容。

(destruct方法不能回收对象资源,只能去掉不必要的旧html缓存,querylist全都是静态方法,会常驻内存,但是每次调用的phpQuery却又是重新创建一个。)

解决方法,只初始化一个$ql = QueryList::getInstance();

$ql = QueryList::getInstance();

之后

不要用静态方法来调用例如:$ql::html($html); 否则内存爆了还是会出错

都得改成 $ql->html($html);

但是会出现Service: rule not found

所以 还是用的上面的解决方案:

$ql2 = QueryList::getInstance();

foreach ($query as $key => $value) {

$url = $value['link'];

// 定义采集规则

$rules = [

// 采集文章标题

'link' => ['.fr a:eq(2)', 'href', '', function ($content) {

//利用回调函数补全相对链接

$baseUrl = 'http://www.baidu.com';

return $baseUrl . $content;

}],

];

try {

$rt = $ql2->get($url)->rules($rules)->removeHead()->query()->getData();

var_dump($rt->all());

} catch (RequestException $e) {

//print_r($e->getRequest());

echo 'Http Error';

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值