PHP使用puppeteer抓取JS渲染后的页面内容

最近遇到一个问题,需要爬取js渲染后的网页内容,因此研究了下相关实现方式。主要借助puppeteer实现,它是一个Node库,要想在PHP中使用,还借助了spatie/browsershot

环境依赖

环境要求
Node>=7.6.0
PHP>=7.1
PHP extensionphp_sockets, php_exif

puppeteer

Puppeteer是一个Node库,我是直接在php项目下使用npm安装这个库,然后借助spatie/browsershot来调用它。读者也可以新建一个node项目安装这个库,然后对外暴漏一个端口通过接口的方式传递url返回html内容的方式实现。

1

npm i puppeteer --save

离线安装Chromium

安装puppeteer时会下载Chromium,因为众所周知的原因可能会下载不下来,因此下面提供了离线下载的方式。

跳过安装chromium

如果已经运行上一步的命令并且正在下载Chromium了,那可以直接Ctrl+C停止任务。如果还没运行,就使用下面的命令安装。

1

npm i puppeteer --ignore-scripts

获取需要下载的chromium版本号

打开/node_modules/puppeteer/package.json搜索chromium_revision对应的版本号

1

2

3

4

"puppeteer": {

    "chromium_revision": "756035",

    "firefox_revision": "latest"

}

下载对应版本的chromium

用上面的版本号替换掉下方花括号里的字符,比如我本地是win x64,下载地址就是https://commondatastorage.googleapis.com/chromium-browser-snapshots/Win_x64/756035/chrome-win.zip

1

2

3

4

5

6

7

8

9

10

11

12

13

14

mac版下载地址:

https://commondatastorage.googleapis.com/chromium-browser-snapshots/Mac/{chromium版本}/chrome-mac.zip

windows 64位版本下载地址:

https://commondatastorage.googleapis.com/chromium-browser-snapshots/Win_x64/{chromium版本}/chrome-win.zip

windows 32位版本下载地址:

https://commondatastorage.googleapis.com/chromium-browser-snapshots/Win/{chromium版本}/chrome-win.zip

Linux X86版本下载地址:

https://commondatastorage.googleapis.com/chromium-browser-snapshots/Linux/{chromium版本}/chrome-linux.zip

Linux X64版本下载地址:

https://commondatastorage.googleapis.com/chromium-browser-snapshots/Linux_x64/{chromium版本}/chrome-linux.zip

解压

将下载下来的chromium安装包解压到puppeteer中的.local_chromium/win64-{chromium版本号}/目录下。以我的为例就是/node_modules/puppeteer/.local_chromium/win64-756035/chrome-win/。搞定~

spatie/browsershot

browsershot 是一个composer包,以前还用过的spatie/laravel-permission,都是同一团队制作的

1

composer require spatie/browsershot

使用

其实困难的部分就是找到合适的工具以及安装工具,真正使用反而很简单。下面列了一个很简单的例子,更多方法还是去看官方文档吧。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<?php

use Spatie\Browsershot\Browsershot;

class Spider

{

    /**

     * 获取html内容

     * @param $url

     * @return string

     */

    public static function getBodyHtml($url)

    {

        return Browsershot::url($url)->bodyHtml();

    }

}

 总结

到此这篇关于PHP使用puppeteer抓取JS渲染后的页面内容的文章就介绍到这了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值