Laravel中如何使用操纵采集异步加载的网页内容

  介绍

小编给大家分享一下Laravel中如何使用操纵采集异步加载的网页内容,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

采集网页内容是一项很常见的需求,比较传统的静态页面,旋度就能搞的定。但如果页面中有动态加载的内容,比如有些页面里通过ajax加载的文章正文内容,又如果有些页面加载完成后进行了一些额外处理(图片地址替换等等……)而你想采集这些处理过后的内容。那么牛逼闪闪的卷发也束手无策了。

做过类似需求的人可能会说,老铁,上PhantomJS啊!

没错,这是一个办法,而且在相当长的时间里PhantomJS是为数不多的能解决这类需求的工具里的佼佼者。

但今天这里要介绍的是一个后来居上的工具,操纵,它是随着Chrome无头技术兴起而快速发展起来的。而且非常关键的是,操纵由Chrome的官方团队开发和维护,可以说相当靠谱了!

操纵木偶的人是一个js包,要想在Laravel中使用,得借助于另一神器spatie/browsershot。

<强>安装

安装spatie/browsershot

browsershot是一个作曲家包,出自于大神团队spatie

,美元composer  require  spatie/browsershot

安装操纵木偶的

,美元npm 小姐:puppeteer ——保存

也可以全局安全操纵木偶的人但就个人经验而言,在项目中安装是比较推荐的做法,因为这样不同项目不会同时受全局安装的操纵木偶的影响,此外项目中安装也方便使用phpdeployer进行升级(phpdeploy升级时不会影响线上项目运行,要知道升级/安装操纵可是很费时的,有时候还不能保证一次成功)。

安装操纵时会下载chromium浏览器,鉴于咱特殊国情,很有可能出现无法下载的情况,对此,就请大家各显神通吧……

<强>使用

以采集今日头条手机版页面文章内容为例。

use  spatie \ browsershot \ browsershot;   public  function  getBodyHtml ()   {   ,,,newsUrl 美元;=,& # 39;https://m.toutiao.com/i6546884151050502660/& # 39;;   ,,,,   ,,,html 美元;=,Browsershot: url (newsUrl美元)   ,,,,,,,→windowSize (480,, 800)   ,,,,,,,→userAgent (& # 39; Mozilla/5.0, (Linux;, Android  6.0;, Nexus  5,构建/MRA58N), AppleWebKit/537.36, (KHTML, like 壁虎),Chrome/63.0.3239.132  Mobile  Safari/537.36 & # 39;)   ,,,,,,,→移动()   ,,,,,,,()→联系   ,,,,,,,→bodyHtml ();   ,,,\日志:信息(html);   }

运行后可以在日志中看到如下内容(截图中只是其中部分)

 Laravel中如何使用操纵采集异步加载的网页内容

此外,也可以将页面保存为图片或PDF文件。

use  Spatie \ Browsershot \ Browsershot;   public  function  getBodyHtml ()   {   ,,,newsUrl 美元;=,& # 39;https://m.toutiao.com/i6546884151050502660/& # 39;;   ,,,,   ,,,Browsershot: url (newsUrl美元)   ,,,,,,,→windowSize (480,, 800)   ,,,,,,,→userAgent (& # 39; Mozilla/5.0, (Linux;, Android  6.0;, Nexus  5,构建/MRA58N), AppleWebKit/537.36, (KHTML, like 壁虎),Chrome/63.0.3239.132  Mobile  Safari/537.36 & # 39;)   ,,,,,,,→移动()   ,,,,,,,()→联系   ,,,,,,,→setDelay (1000)   ,,,,,,,→保存(public_path(& # 39;图像/toutiao.jpg& # 39;));   }

 Laravel中如何使用操纵采集异步加载的网页内容

图片里那些框与系统字体有关。代码中使用了一个setDelay()方法,是为了让内容加载完成后再进行截的图,简单粗暴,可能不是最好的解决办法。

<强>可能出现的问题

系统得支持铬浏览器,当然现在绝大部分浏览器是支持的,要不然也没法,还是用PhantomJS吧。

项目中安装了操纵后调用时有可能出现权限问题,这就需要对项目下/node_modules/操纵木偶的人目录赋予适当的权限。

以上是“Laravel中如何使用操纵采集异步加载的网页内容”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

Laravel中如何使用操纵采集异步加载的网页内容