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

 更新时间:2025年02月02日 15:32:17   作者:SoCai  
最近遇到一个问题,需要爬取js渲染后的网页内容,因此研究了下相关实现方式,主要借助puppeteer实现,它是一个Node库,要想在PHP中使用,还借助了spatie/browsershot

最近遇到一个问题,需要爬取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内容的方式实现。

npm i puppeteer --save

离线安装Chromium

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

跳过安装chromium

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

npm i puppeteer --ignore-scripts

获取需要下载的chromium版本号

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

"puppeteer": {
    "chromium_revision": "756035",
    "firefox_revision": "latest"
}

下载对应版本的chromium

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

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,都是同一团队制作的

composer require spatie/browsershot

使用

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

<?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渲染后的页面内容的文章就介绍到这了,更多相关PHP获取JS渲染后的页面内容内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使PHP自定义函数返回多个值

    使PHP自定义函数返回多个值

    使PHP自定义函数返回多个值...
    2006-11-11
  • PHP实现图片压缩的两则实例

    PHP实现图片压缩的两则实例

    这篇文章主要介绍了PHP实现图片压缩的两则实例,很有实用价值,值得借鉴学习,需要的朋友可以参考下
    2014-07-07
  • KindEditor在php环境下上传图片功能集成的方法示例

    KindEditor在php环境下上传图片功能集成的方法示例

    这篇文章主要介绍了PHP环境下如何实现使用KindEditor编辑器上传图片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • PHP使用正则表达式获取微博中的话题和对象名

    PHP使用正则表达式获取微博中的话题和对象名

    这篇文章主要介绍了PHP使用正则表达式获取微博中的话题和对象名,涉及php正则匹配与字符串操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 浅谈Laravel中如何对大文件进行加密

    浅谈Laravel中如何对大文件进行加密

    在Laravel项目中,用户可以上传任何大小的文件,出于安全目的,需要对这些文件进行静态加密。Laravel提供encryption, 但它们主要用于加密值。 使用encrypt助手方法对像图像文件进行加密可以很好地工作,文件内容需要加载到内存中,对于大文件来说是个问题。
    2021-05-05
  • PHP自定义函数格式化json数据示例

    PHP自定义函数格式化json数据示例

    这篇文章主要介绍了PHP自定义函数格式化json数据的方法,结合实例形式分析了php通过自定义函数进行字符串与数组的遍历、转换、计算等操作实现json数据格式化的功能,需要的朋友可以参考下
    2016-09-09
  • php简单实现多字节字符串翻转的方法

    php简单实现多字节字符串翻转的方法

    这篇文章主要介绍了php简单实现多字节字符串翻转的方法,涉及php操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • PHP文件后缀不强制为.php方法

    PHP文件后缀不强制为.php方法

    在本文中小编给大家整理了关于PHP文件后缀不强制为.php的操作方法和技巧,需要的朋友们学习下。
    2019-03-03
  • php中的Base62类(适用于数值转字符串)

    php中的Base62类(适用于数值转字符串)

    以下是对php中Base62类的用法进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-08-08
  • php抓取网站图片并保存的实现方法

    php抓取网站图片并保存的实现方法

    这篇文章主要介绍了php抓取网站图片并保存的实现方法,重点借鉴了匹配img标签和其src属性正则的写法,封装了一个php远程抓取图片的类,感兴趣的小伙伴们可以参考一下
    2015-10-10

最新评论