PHP使用puppeteer抓取JS渲染后的頁面內(nèi)容
最近遇到一個問題,需要爬取js渲染后的網(wǎng)頁內(nèi)容,因此研究了下相關實現(xiàn)方式。主要借助puppeteer
實現(xiàn),它是一個Node庫,要想在PHP中使用,還借助了spatie/browsershot
。
環(huán)境依賴
環(huán)境 | 要求 |
---|---|
Node | >=7.6.0 |
PHP | >=7.1 |
PHP extension | php_sockets, php_exif |
puppeteer
Puppeteer是一個Node
庫,我是直接在php項目下使用npm安裝這個庫,然后借助spatie/browsershot
來調(diào)用它。讀者也可以新建一個node項目安裝這個庫,然后對外暴漏一個端口通過接口的方式傳遞url返回html內(nèi)容的方式實現(xiàn)。
npm i puppeteer --save
離線安裝Chromium
安裝puppeteer
時會下載Chromium
,因為眾所周知的原因可能會下載不下來,因此下面提供了離線下載的方式。
跳過安裝chromium
如果已經(jīng)運行上一步的命令并且正在下載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內(nèi)容 * @param $url * @return string */ public static function getBodyHtml($url) { return Browsershot::url($url)->bodyHtml(); } }
總結(jié)
到此這篇關于PHP使用puppeteer抓取JS渲染后的頁面內(nèi)容的文章就介紹到這了,更多相關PHP獲取JS渲染后的頁面內(nèi)容內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
php+MySql實現(xiàn)登錄系統(tǒng)與輸出瀏覽者信息功能
這篇文章主要介紹了php+MySql實現(xiàn)登錄系統(tǒng)與輸出瀏覽者信息功能 的相關資料,需要的朋友可以參考下2016-07-07zend framework配置操作數(shù)據(jù)庫實例分析
zend framework項目建立后,看了下zend framework配置操作數(shù)據(jù)庫,本文將詳細介紹,需要了解的朋友可以參考下2012-12-12