QueryList curlMulti + phantomjs 多线程动态采集要怎么实现
问题描述
可以独立实现:多线程采集 、 采集动态渲染页面
但是想把这两个合并实现,就不知道如何下手了,
你大神帮帮忙.
问题出现的环境背景及自己尝试过哪些方法
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
/**
* 多线程采集
*/
public function multi(){
$ql = QueryList::getInstance();
$ql->use(CurlMulti::class);
$ql->use(CurlMulti::class,'curlMulti');
// 采集某页面所有的图片
$ql->rules([
'city' => [
'#speedlist [name=city]',
'text'
],
'time' => [
'#speedlist [name=conntime]',
'text'
]
])->curlMulti([
'http://tool.chinaz.com/speedtest/baidu.com/',
'http://tool.chinaz.com/speedtest/163.com/',
])->success(function (QueryList $ql,CurlMulti $curl,$r){
/**没有集合动态渲染 模块,所以就查不到**/
echo "Current url:{$r['info']['url']} \r\n";
$data = $ql->query()->getData();
print_r($data->all());
})->start([
// 最大并发数
'maxThread' => 10,
// 错误重试次数
'maxTry' => 3
]);
}
/**
- 使用PhantomJS采集JavaScript动态渲染的页面
*/
public function phantomjs(){
set_time_limit(0);
$domain = 'www.baidu.com';
$ql = QueryList::getInstance();
// 安装时需要设置PhantomJS二进制文件路径
$ql->use(PhantomJs::class, '/www/wwwroot/phantomjs/bin/phantomjs');
// or Custom function name
$ql->use(PhantomJs::class, '/www/wwwroot/phantomjs/bin/phantomjs', 'browser');
$data = $ql->browser(function (\JonnyW\PhantomJs\Http\RequestInterface $r) use ($domain) {
$r->setMethod('GET');
$r->setUrl('http://tool.chinaz.com/speedtest/' . $domain);
$r->setTimeout(1000 * 40); // 60 seconds
$r->setDelay(25); // 3 seconds
return $r;
})
->rules([
'city' => [
'#speedlist [name=city]',
'text'
],
'time' => [
'#speedlist [name=conntime]',
'text'
]
])
->query()
->getData();
echo ($data->all());
exit();
}
你期待的结果是什么?实际看到的错误信息又是什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论