最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Laravel中如何使用puppeteer采集異步加載的網(wǎng)頁(yè)內(nèi)容-創(chuàng)新互聯(lián)

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

創(chuàng)新互聯(lián)自2013年起,先為范縣等服務(wù)建站,范縣等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為范縣企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

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

做過(guò)類(lèi)似需求的人可能會(huì)說(shuō),老鐵,上 PhantomJS 啊!

沒(méi)錯(cuò),這是一個(gè)辦法,而且在相當(dāng)長(zhǎng)的時(shí)間里 PhantomJS 是為數(shù)不多的能解決這類(lèi)需求的工具里的佼佼者。

但今天這里要介紹的是一個(gè)后來(lái)居上的工具 -- puppeteer,它是隨著 Chrome Headless 技術(shù)興起而快速發(fā)展起來(lái)的。而且非常關(guān)鍵的是,puppeteer 由 Chrome 的官方團(tuán)隊(duì)開(kāi)發(fā)和維護(hù),可以說(shuō)相當(dāng)靠譜了!

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

安裝

安裝 spatie/browsershot

browsershot 是一個(gè) composer 包,出自于大神團(tuán)隊(duì) spatie

$ composer require spatie/browsershot

安裝 puppeteer

$ npm i puppeteer --save

也可以全局安全 puppeteer 但就個(gè)人經(jīng)驗(yàn)而言,在項(xiàng)目中安裝是比較推薦的做法,因?yàn)檫@樣不同項(xiàng)目不會(huì)同時(shí)受全局安裝的 puppeteer 影響,此外項(xiàng)目中安裝也方便使用 phpdeployer 進(jìn)行升級(jí)(phpdeploy 升級(jí)時(shí)不會(huì)影響線(xiàn)上項(xiàng)目運(yùn)行,要知道升級(jí)/安裝 puppeteer 可是很費(fèi)時(shí)的,有時(shí)候還不能保證一次成功)。

安裝 puppeteer 時(shí)會(huì)下載 Chromium-Browser,鑒于咱特殊國(guó)情,很有可能出現(xiàn)無(wú)法下載的情況,對(duì)此,就請(qǐng)大家各顯神通吧……

使用

以采集今日頭條手機(jī)版頁(yè)面文章內(nèi)容為例。

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);
}

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

Laravel中如何使用puppeteer采集異步加載的網(wǎng)頁(yè)內(nèi)容

此外,也可以將頁(yè)面保存為圖片或 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采集異步加載的網(wǎng)頁(yè)內(nèi)容

圖片里那些框與系統(tǒng)字體有關(guān)。代碼中使用了一個(gè) setDelay() 方法,是為了讓內(nèi)容加載完成后再進(jìn)行截圖,簡(jiǎn)單粗暴,可能不是好的解決辦法。

可能出現(xiàn)的問(wèn)題

系統(tǒng)得支持 Chromium 瀏覽器,當(dāng)然現(xiàn)在絕大部分瀏覽器是支持的,要不然也沒(méi)法,還是用 PhantomJS 吧。

項(xiàng)目中安裝了 puppeteer 后調(diào)用時(shí)有可能出現(xiàn)權(quán)限問(wèn)題,這就需要對(duì)項(xiàng)目下 /node_modules/puppeteer 目錄賦予適當(dāng)?shù)臋?quán)限。

以上是“Laravel中如何使用puppeteer采集異步加載的網(wǎng)頁(yè)內(nèi)容”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)站標(biāo)題:Laravel中如何使用puppeteer采集異步加載的網(wǎng)頁(yè)內(nèi)容-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://fisionsoft.com.cn/article/cdgdog.html