弋弋弋弋
  • 2
  • 新手请关照

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

}

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

阅读 572
评论 1月9日提问
    撰写回答

    登录后参与交流、获取后续更新提醒