PHP使用puppeteer抓取JS渲染后的頁(yè)面內(nèi)容
最近遇到一個(gè)問(wèn)題,需要爬取js渲染后的網(wǎng)頁(yè)內(nèi)容,因此研究了下相關(guān)實(shí)現(xiàn)方式。主要借助puppeteer
實(shí)現(xiàn),它是一個(gè)Node庫(kù),要想在PHP中使用,還借助了spatie/browsershot
。
環(huán)境依賴(lài)
環(huán)境 | 要求 |
---|---|
Node | >=7.6.0 |
PHP | >=7.1 |
PHP extension | php_sockets, php_exif |
puppeteer
Puppeteer是一個(gè)Node
庫(kù),我是直接在php項(xiàng)目下使用npm安裝這個(gè)庫(kù),然后借助spatie/browsershot
來(lái)調(diào)用它。讀者也可以新建一個(gè)node項(xiàng)目安裝這個(gè)庫(kù),然后對(duì)外暴漏一個(gè)端口通過(guò)接口的方式傳遞url返回html內(nèi)容的方式實(shí)現(xiàn)。
npm i puppeteer --save
離線(xiàn)安裝Chromium
安裝puppeteer
時(shí)會(huì)下載Chromium
,因?yàn)楸娝苤脑蚩赡軙?huì)下載不下來(lái),因此下面提供了離線(xiàn)下載的方式。
跳過(guò)安裝chromium
如果已經(jīng)運(yùn)行上一步的命令并且正在下載Chromium
了,那可以直接Ctrl+C
停止任務(wù)。如果還沒(méi)運(yùn)行,就使用下面的命令安裝。
npm i puppeteer --ignore-scripts
獲取需要下載的chromium版本號(hào)
打開(kāi)/node_modules/puppeteer/package.json
搜索chromium_revision
對(duì)應(yīng)的版本號(hào)
"puppeteer": { "chromium_revision": "756035", "firefox_revision": "latest" }
下載對(duì)應(yīng)版本的chromium
用上面的版本號(hào)替換掉下方花括號(hào)里的字符,比如我本地是
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
解壓
將下載下來(lái)的chromium
安裝包解壓到puppeteer
中的.local_chromium/win64-{chromium版本號(hào)}/
目錄下。以我的為例就是/node_modules/puppeteer/.local_chromium/win64-756035/chrome-win/
。搞定~
spatie/browsershot
browsershot 是一個(gè)composer
包,以前還用過(guò)的spatie/laravel-permission,都是同一團(tuán)隊(duì)制作的
composer require spatie/browsershot
使用
其實(shí)困難的部分就是找到合適的工具以及安裝工具,真正使用反而很簡(jiǎn)單。下面列了一個(gè)很簡(jiǎn)單的例子,更多方法還是去看官方文檔吧。
<?php use Spatie\Browsershot\Browsershot; class Spider { /** * 獲取html內(nèi)容 * @param $url * @return string */ public static function getBodyHtml($url) { return Browsershot::url($url)->bodyHtml(); } }
總結(jié)
到此這篇關(guān)于PHP使用puppeteer抓取JS渲染后的頁(yè)面內(nèi)容的文章就介紹到這了,更多相關(guān)PHP獲取JS渲染后的頁(yè)面內(nèi)容內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PHP登錄驗(yàn)證碼的實(shí)現(xiàn)與使用方法
這篇文章主要介紹了PHP登錄驗(yàn)證碼的實(shí)現(xiàn)與使用方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了php驗(yàn)證碼圖片的生成、顯示、判斷等相關(guān)步驟與使用技巧,需要的朋友可以參考下2016-07-07如何解決php domdocument找不到的問(wèn)題
在本篇文章里小編給大家整理的是一篇關(guān)于php domdocument找不到的解決辦法,有需要的朋友們可以跟著學(xué)習(xí)參考下。2021-07-07PHP樹(shù)形結(jié)構(gòu)tree類(lèi)用法示例
這篇文章主要介紹了PHP樹(shù)形結(jié)構(gòu)tree類(lèi)用法,結(jié)合實(shí)例形式分析了php無(wú)限分類(lèi)樹(shù)tree.class.php的定義及使用相關(guān)操作技巧,需要的朋友可以參考下2019-02-02PHP實(shí)現(xiàn)事件機(jī)制實(shí)例分析
這篇文章主要介紹了PHP實(shí)現(xiàn)事件機(jī)制的方法,實(shí)例分析了事件機(jī)制的原理與php的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-06-06PHP 匿名函數(shù)與注意事項(xiàng)詳細(xì)介紹
這篇文章主要介紹了PHP 匿名函數(shù)與注意事項(xiàng)詳細(xì)介紹的相關(guān)資料,匿名函數(shù)是PHP5.3引進(jìn)來(lái)了,php5.3不但引進(jìn)了匿名函數(shù)還有更多更好多新的特性了,下面我們一起來(lái)了解一下PHP匿名函數(shù)與注意事項(xiàng)詳解,需要的朋友可以參考下2016-11-11PHP實(shí)現(xiàn)隨機(jī)發(fā)放撲克牌
這篇文章主要為大家詳細(xì)介紹了PHP實(shí)現(xiàn)隨機(jī)發(fā)放撲克牌,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04php+MySql實(shí)現(xiàn)登錄系統(tǒng)與輸出瀏覽者信息功能
這篇文章主要介紹了php+MySql實(shí)現(xiàn)登錄系統(tǒng)與輸出瀏覽者信息功能 的相關(guān)資料,需要的朋友可以參考下2016-07-07zend framework配置操作數(shù)據(jù)庫(kù)實(shí)例分析
zend framework項(xiàng)目建立后,看了下zend framework配置操作數(shù)據(jù)庫(kù),本文將詳細(xì)介紹,需要了解的朋友可以參考下2012-12-12