这里专门开个帖子用来整理采集遇到的问题

安装Puppeteer插件,PHP采集实现抓取百度搜索结果并分析数据结构

PHPer 2022-04-24 38 0 0
我测试代码的环境是Centos8
  • 使用Puppeteer采集JavaScript动态渲染的页面。使用此插件需要有一定的Node.js基础知识,并且会配置Node运行环境。

此插件是基于PuPHPeteer包的简单封装,支持使用Puppeteer所有的API,非常强大!

  • PHP >= 7.1
  • Node >= 8
  • 安装

1,安装依赖插件

 composer require nesk/puphpeteer  ^1.4

2,安装插件

composer require jaeger/querylist-puppeteer

3,安装Node依赖(与composer一样在项目根目录下执行)

npm install @nesk/puphpeteer

或者使用yarn安装Node依赖:

yarn add @nesk/puphpeteer

4,如果npm安装速度太慢,可以尝试更换国内npm镜像源:

npm config set registry https://registry.npm.taobao.org

这里我没试验,我在服务器上安装的,国内的这些源没测试过

用法
在QueryList中注册插件
use QL\QueryList;
use QL\Ext\Chrome;
$ql = QueryList::getInstance();
// 注册插件,默认注册的方法名为: chrome
$ql->use(Chrome::class);
// 或者自定义注册的方法名
$ql->use(Chrome::class,'chrome');
基本用法
// 抓取的目标页面是使用Vue.js动态渲染的页面
$text = $ql->chrome('https://www.iviewui.com/components/button')->find('h1')->text();
print_r($text);
// 输出: Button 按钮
$rules = [
 'h1' => ['h1','text']
];
$ql = $ql->chrome('https://www.iviewui.com/components/button');
$data = $ql->rules($rules)->queryData();
设置Puppeteer launch选项,选项文档:https://github.com/GoogleChrome/puppeteer/blob/v1.11.0/docs/api.md#puppeteerlaunchoptions
$text = $ql->chrome('https://www.iviewui.com/components/button',[
  'timeout' => 6000,
  'ignoreHTTPSErrors' => true,
  // ...
])->find('h1')->text();
更高级的用法,查看Puppeteer文档了解全部API: https://github.com/GoogleChrome/puppeteer
$text = $ql->chrome(function ($page,$browser) {
    $page->setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36');
    // 设置cookie
    $page->setCookie([
      'name' => 'foo',
      'value' => 'xxx',
      'url' => 'https://www.iviewui.com'
    ],[
       'name' => 'foo2',
       'value' => 'yyy',
       'url' => 'https://www.iviewui.com'
    ]);
    $page->goto('https://www.iviewui.com/components/button');
    // 等待h1元素出现
    $page->waitFor('h1');
    // 获取页面HTML内容
    $html = $page->content();
    // 关闭浏览器
    $browser->close();
    // 返回值一定要是页面的HTML内容
    return $html;
})->find('h1')->text();
调试
调试有很多种方法,下面演示通过页面截图和启动可视化Chrome浏览器来了解页面加载情况
页面截图
运行下面代码后可以在项目根目录下看到page.png截图文件。
$text = $ql->chrome(function ($page,$browser) {
    $page->goto('https://www.iviewui.com/components/button');
    // 页面截图
    $page->screenshot([
        'path' => 'page.png',
        'fullPage' => true
    ]);
    $html = $page->content();
    $browser->close();
    return $html;
})->find('h1')->text();
启动可视化Chrome浏览器
运行下面代码后会启动一个Chrome浏览器。
$text = $ql->chrome(function ($page,$browser) {
    $page->goto('https://www.iviewui.com/components/button');
    $html = $page->content();
    // 这里故意设置一个很长的延长时间,让你可以看到chrome浏览器的启动
    sleep(10000000);
    $browser->close();
    // 返回值一定要是页面的HTML内容
    return $html;
},[
 'headless' => false, // 启动可视化Chrome浏览器,方便调试
 'devtools' => true, // 打开浏览器的开发者工具
])->find('h1')->text();

我采集百度时,提示报错,采集代码如下 ...

立即注册
分享的网址网站均收集自搜索引擎以及互联网,非查问网运营,查问网并没有提供其服务,请勿利用其做侵权以及违规行为。

更新于:2022-04-24 18:43:14
    您需要登录后才可以评论。 立即注册
    相关内容

    Centos7利用yum安装apache+mysql8+php7 一篇搞定!

    [PHP] 网盘搜索引擎-采集爬取百度网盘分享文件实现网盘搜索

    PHP7.2以上版本的安装问题

    Opencart安装,提示PHP8+ Required

    OpenCart 中文语言包下载和安装及配置

    OpenCart微信支付配置操作流程

    Opencart安装简体中文语言包

    Opencart安装,提示Error: Variable 'sql_mode' can't be set to the ...

    PHP与APP

    PHP是否可以应用于App开发

    推荐内容

    分享几个好用的bt搜索bt资源下载网址网站

    影视电影剧集动漫综艺bt资源在线播放网址网站推荐分享

    全网最新bt磁力搜索引擎bt资源bt网站网址分享

    怎样使用V2Ray代理和SSTap玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩...

    sstap游戏代理教程 从此玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩虹六...

    使用V2Ray的mKCP协议加速游戏

    v2rayN已停止工作