最近遇到一个问题,需要爬取js渲染后的网页内容,因此研究了下相关实现方式。主要借助puppeteer实现,它是一个Node库,要想在PHP中使用,还借助了spatie/browsershot。
环境依赖
| 环境 | 要求 |
|---|---|
| Node | >=7.6.0 |
| PHP | >=7.1 |
| PHP extension | php_sockets, php_exif |
puppeteer
Puppeteer是一个Node库,我是直接在php项目下使用npm安装这个库,然后借助spatie/browsershot来调用它。读者也可以新建一个node项目安装这个库,然后对外暴漏一个端口通过接口的方式传递url返回html内容的方式实现。
| 1 |
|
离线安装Chromium
安装puppeteer时会下载Chromium,因为众所周知的原因可能会下载不下来,因此下面提供了离线下载的方式。
跳过安装chromium
如果已经运行上一步的命令并且正在下载Chromium了,那可以直接Ctrl+C停止任务。如果还没运行,就使用下面的命令安装。
| 1 |
|
获取需要下载的chromium版本号
打开/node_modules/puppeteer/package.json搜索chromium_revision对应的版本号
| 1 2 3 4 |
|
下载对应版本的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 |
|
解压
将下载下来的chromium安装包解压到puppeteer中的.local_chromium/win64-{chromium版本号}/目录下。以我的为例就是/node_modules/puppeteer/.local_chromium/win64-756035/chrome-win/。搞定~
spatie/browsershot
browsershot 是一个composer包,以前还用过的spatie/laravel-permission,都是同一团队制作的
| 1 |
|
使用
其实困难的部分就是找到合适的工具以及安装工具,真正使用反而很简单。下面列了一个很简单的例子,更多方法还是去看官方文档吧。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
总结
到此这篇关于PHP使用puppeteer抓取JS渲染后的页面内容的文章就介绍到这了

911

被折叠的 条评论
为什么被折叠?



