免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

Laravel中如何使用puppeteer采集異步加載的網頁內容

小編給大家分享一下Laravel中如何使用puppeteer采集異步加載的網頁內容,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

公司主營業務:網站設計制作、網站設計、移動網站開發等業務。幫助企業客戶真正實現互聯網宣傳,提高企業的競爭能力。成都創新互聯是一支青春激揚、勤奮敬業、活力青春激揚、勤奮敬業、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰,讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創新互聯推出蠡縣免費做網站回饋大家。

采集網頁內容是一項很常見的需求,比較傳統的靜態頁面,curl 就能搞定。但如果頁面中有動態加載的內容,比如有些頁面里通過 ajax 加載的文章正文內容,又如果有些頁面加載完成后進行了一些額外處理(圖片地址替換等等……)而你想采集這些處理過后的內容。那么牛逼閃閃的 curl 也束手無策了。

做過類似需求的人可能會說,老鐵,上 PhantomJS 啊!

沒錯,這是一個辦法,而且在相當長的時間里 PhantomJS 是為數不多的能解決這類需求的工具里的佼佼者。

但今天這里要介紹的是一個后來居上的工具 -- puppeteer,它是隨著 Chrome Headless 技術興起而快速發展起來的。而且非常關鍵的是,puppeteer 由 Chrome 的官方團隊開發和維護,可以說相當靠譜了!

puppeteer 是一個 js 包,要想在 Laravel 中使用,得借助于另一神器spatie/browsershot。

安裝

安裝 spatie/browsershot

browsershot 是一個 composer 包,出自于大神團隊 spatie

$ composer require spatie/browsershot

安裝 puppeteer

$ npm i puppeteer --save

也可以全局安全 puppeteer 但就個人經驗而言,在項目中安裝是比較推薦的做法,因為這樣不同項目不會同時受全局安裝的 puppeteer 影響,此外項目中安裝也方便使用 phpdeployer 進行升級(phpdeploy 升級時不會影響線上項目運行,要知道升級/安裝 puppeteer 可是很費時的,有時候還不能保證一次成功)。

安裝 puppeteer 時會下載 Chromium-Browser,鑒于咱特殊國情,很有可能出現無法下載的情況,對此,就請大家各顯神通吧……

使用

以采集今日頭條手機版頁面文章內容為例。

use Spatie\Browsershot\Browsershot;
public function getBodyHtml()
{
    $newsUrl = 'https://m.toutiao.com/i6546884151050502660/';
    
    $html = Browsershot::url($newsUrl)
        ->windowSize(480, 800)
        ->userAgent('Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36')
        ->mobile()
        ->touch()
        ->bodyHtml();
    \Log::info($html);
}

運行后可以在日志中看到如下內容(截圖中只是其中部分)

Laravel中如何使用puppeteer采集異步加載的網頁內容

此外,也可以將頁面保存為圖片或 PDF 文件。

use Spatie\Browsershot\Browsershot;
public function getBodyHtml()
{
    $newsUrl = 'https://m.toutiao.com/i6546884151050502660/';
    
    Browsershot::url($newsUrl)
        ->windowSize(480, 800)
        ->userAgent('Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36')
        ->mobile()
        ->touch()
        ->setDelay(1000)
        ->save(public_path('images/toutiao.jpg'));
}

Laravel中如何使用puppeteer采集異步加載的網頁內容

圖片里那些框與系統字體有關。代碼中使用了一個 setDelay() 方法,是為了讓內容加載完成后再進行截圖,簡單粗暴,可能不是最好的解決辦法。

可能出現的問題

系統得支持 Chromium 瀏覽器,當然現在絕大部分瀏覽器是支持的,要不然也沒法,還是用 PhantomJS 吧。

項目中安裝了 puppeteer 后調用時有可能出現權限問題,這就需要對項目下 /node_modules/puppeteer 目錄賦予適當的權限。

以上是“Laravel中如何使用puppeteer采集異步加載的網頁內容”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創新互聯行業資訊頻道!

當前題目:Laravel中如何使用puppeteer采集異步加載的網頁內容
網頁網址:http://m.newbst.com/article10/pjcego.html

成都網站建設公司_創新互聯,為您提供移動網站建設網站營銷云服務器定制網站電子商務網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

營銷型網站建設