在这个教程中我们会从 Pexels 抓取一些猫的图片。这个网站供应高质量且免费的素材图片。他们供应了API, 但这些 API 有 200次/小时 的要求频率限定。
福利图片
发起并发要求在网页抓取中利用异步 PHP (比较利用同步办法)的最大好处是可以在更短的韶光内完成更多的事情。利用异步 PHP 使得我们可以急速要求尽可能多的网页而不是每次只能要求单个网页并等待结果返回。 因此,一旦要求结果返回我们就可以开始处理。
首先,我们从 GitHub 上拉取一个叫做 buzz-react 的异步 HTTP 客户真个代码 -- 它是一个基于 ReactPHP 的大略、致力于并发处理大量 HTTP 要求的异步 HTTP 客户端:
composer require clue/buzz-react
这里用到了composer这个神器,不理解的同学可以私信回答“composer”自助获取干系资料。
现在, 我们就可以要求 pexels 上的图片页面 了:
我们创建了 Clue\React\Buzz\Browser 的实例, 把它作为 HTTP client 利用。上面的代码发起了一个异步的 GET 要求来获取网页内容(包含一张小猫们的图片)。 $client->get($url) 方法返回了一个包含 PSR-7 response 的 promise 工具。
客户端是异步事情的,这意味着我们可以很随意马虎地要求几个页面,然后这些要求会被同步实行:
这里的代码含义如下:
发起一个要求获取相应添加相应的处理程序当相应解析完毕就处理相应以是,这个逻辑可以提取到一个类里,这样我们可以很随意马虎地要求多个 URL 并添加相同的相应处理程序。让我们基于Browser创建一个包装器。
用下面的代码创建一个名为Scraper的类:
我们把Browser作为依赖项注入到布局函数并供应一个公共方法scrape(array $urls)。接着对每个指定的 URL 发起一个GET要求。当相应完成时,我们调用一个私有方法processResponse(string $html)。这个方法卖力遍历 HTML 代码并下载图片。下一步是审查收到的 HTML 代码,然后从里面提取图片。
小编建议PHP版本最好在7.0以上,在实践过程中碰着问题的可以私信小编哦~~把你们的D盘,E盘,F盘都装满吧!
!