php抓取网页(如何用PHP抓取网页上的数据?教你如何使用Headlesschrome抓取网页内容 )

优采云 发布时间: 2022-04-18 14:22

  php抓取网页(如何用PHP抓取网页上的数据?教你如何使用Headlesschrome抓取网页内容

)

  随着近几年前端的快速发展,目前的前端趋势是使用一些 JS 框架进行开发,比如大家熟知的 React、Angular 和 Vue。有些媒体网页为了防止内容被复制,使用ajax或者使用js在网页上插入cookies,然后使用ajax进行判断。

  正所谓道高一尺,魔高一尺,所以今天就教大家如何使用php抓取网页数据。

  通常,用PHP爬取网页的数据无非就是CURL或者使用file_get_contents,或者使用打包后的简单html dom。这种情况下,确实可以取数据,但是不能等网页上的js加载完毕再取数据。

  因此,网上有一种phantomjs的解决方案,使用php爬取js加载的网页。但是我用了之后发现有些网站会用js插入cookies,然后验证cookies。但是phantomjs无法保存cookies,phantomjs的作者放弃了维护这个项目,可能是因为chrome在59版本推出了headless功能。

  什么是无头镀铬?

  Headless Chrome 是 Chrome 浏览器的无界面形式。PHP使用headless chrome加载网页,然后就可以获取网页上的内容,截图,或者将截图转换成PDF

  接下来是干货!教你如何使用 Headless chrome 抓取网页内容。

  首先我们在Github上使用chrome php,这是一个打包好的库,所以不用自己写,直接使用即可

  本文文章主要教大家如何抓取内容,Headless Chrome还有其他功能,可以看这个chrome php文档使用其他API

  use HeadlessChromium\BrowserFactory;

$browserFactory = new BrowserFactory('/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome');

// starts headless chrome

$browser = $browserFactory->createBrowser();

// creates a new page and navigate to an url

$page = $browser->createPage();

$page->navigate('http://example.com')->waitForNavigation('networkIdle');

// get page content

$pageTitle = $page->evaluate('document.documentElement.innerHTML')->getReturnValue();

// bye

$browser->close();

  BrowserFactory 中传递的参数是我本地机器上的 chrome。以上是mac的配置

  如果是windows用户,找到自己chrome的路径,如果是linux服务器,写google-chrome的命令

  窗口配置

  new BrowserFactory('C:\Program Files (x86)\Google\Chrome\Application\chrome');

  CentOS 配置

  新的 BrowserFactory('google-chrome');

  Windows和CentOS的配置我没试过。Windows 配置可在 Internet 上找到。对于 CentOS,我还没有把代码放在服务器上试用。理论上应该问题不大。如果有什么问题,请在下方留言交流,但是下面在 CentOS 上安装 Chrome 确实没问题。

  在 CentOS 上安装谷歌浏览器

  1.下载chrome最新rpm

  2.下载后直接安装

  yum localinstall google-chrome-stable_current_x86_64.rpm

  3.安装后检查版本

  google-chrome -version

  4.可以测试截图,必须写--no-sandbox,否则无法正常工作

  google-chrome --no-sandbox --headless --disable-gpu --screenshot https://www.chromestatus.com/

  如果不写--no-sandbox,会报错,就是下面的错误信息

  [0714/013139.867781:ERROR:(89)] 不支持在没有 –no-sandbox 的情况下以 root 身份运行。请参阅

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线