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();

}

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 2.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题