queryList 配合 PhantomJS 插件 采集 JavaScript 动态渲染的页面

百度搜索 queryList文档地址

queryList 配合 PhantomJS 插件 采集 JavaScript 动态渲染的页面

queryList 配合 PhantomJS 插件 采集 JavaScript 动态渲染的页面

由于 PhantomJSlaravel 的引入支持不好,所以我将两者安装到项目根目录的 sdk/queryList/ 下。

"jaeger/querylist": "^4.2",
"jaeger/querylist-phantomjs": "^4.0"

再下载 PhantomJS 二进制文件,我也放到了 sdk/ 目录下。

queryList 配合 PhantomJS 插件 采集 JavaScript 动态渲染的页面

Laravel 中在 console 中写逻辑代码,以抓取百度直播网页版为例:

queryList 配合 PhantomJS 插件 采集 JavaScript 动态渲染的页面

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use DB;

class Phantomjs extends Command
{
    protected $signature = 'js:test';
    protected $description = '....';
    protected $ql;
    public function __construct(){
        parent::__construct();   
    }
    public function handle()
    {
        require_once base_path().'/sdk/queryList/vendor/autoload.php';
        $this->ql = \QL\QueryList::getInstance();
        // 设置PhantomJS二进制文件路径
        $this->ql->use(\QL\Ext\PhantomJs::class,'/www/wwwroot/blog/sdk/phantomjs-2.1.1/bin/phantomjs');

        while(true){
            $this->bd();
            sleep(5);
        }
    }

    public function bd(){
        $room_id = $this->bd_roomid;
        $url = 'http://mbd.baidu.com/webpage?type=live&action=liveshow&room_id='.$room_id;

        $data = $this->ql->browser(function (\JonnyW\PhantomJs\Http\RequestInterface $r) use ($url){
            $r->setMethod('GET');
            $r->setUrl($url);
            $r->setTimeout(10000); // 10 seconds 
            $r->setDelay(3); // 3 seconds 这里的延时很重要
            return $r;
        })
        ->rules([
            'avatar' => ['.msg-box-avatar', 'src'],
            'username' => ['.msg-box-name', 'text'],
            'text' => ['.msg-box-text', 'text'],
        ])
        ->range('.msg-box')
        ->queryData(); //array
    }
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
welcome come back
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

知道怎么设置ua 吗

3年前 评论
php_yt (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
98
粉丝
25
喜欢
159
收藏
359
排名:316
访问:3.0 万
私信
所有博文
社区赞助商