【51CTO.com快译】网络爬取(Web scraping,请详见:http://www.prowebscraper.com/blog/web-scraping-using-php/)是普通商业网站的常规功能之一。不同的网站在不同的应用场景下,会用到不同的爬取任务,其中包括:产品信息和股票价格等方面。
与此同时,在网站系统的后端开发中,网络爬取也是备受关注。在程序员的圈子内,您会经常听到:又有人开发创建了高质量的解析器或“爬虫”之类的新闻。
在本文中,我们将和您探讨一些实用的网络爬取库与工具,以满足您直接抓取网站信息和数据的业务需求。
在PHP环境中,您可以通过如下工具库,来进行与网络抓取相关的各项操作:
- Goutte
- Simple HTML DOM
- htmlSQL
- cURL
- Requests
- HTTPful
- Buzz
- Guzzle
1. Goutte
简介:
- Goutte库的神奇之处在于:它可以为您提供如何通过使用PHP技术,来抓取各种内容的详细支持。
- 基于Symfony框架的Goutte,是一种网站爬取类别的专用工具库。
- Goutte的实用之处在于:它不但提供了各种可用来抓取网站信息的API,而且能够从HTML和XML的响应信息中抓取各种数据。
- Goutte持有MIT颁发的许可证。
特征:
- 适用于大型项目。
- 基于OOP(面向对象的程序设计)。
- 具有中等速度的解析能力。
环境要求:
需要具有PHP 5.5以上和Guzzle 6以上(见下文)的环境。
文档链接:
https://goutte.readthedocs.io/en/latest/
扩展阅读:
https://menubar.io/php-scraping-tutorial-scrape-reddit-with-goutte
2. Simple HTML DOM
简介:
- HTML DOM解析器是由PHP 5以上的版本编写而成。其优势在于:能够让您轻松、便捷地通过访问和使用HTML,来开展工作。
- 通过它,您可以像使用jQuery那样,快速地在HTML页面上找到那些带有选择器的标签。
- 您可以仅使用一行HTML代码,来实现内容的抓取。
- 与本文介绍到的其他工具库相比,它的运行速度并不算快。
- Simple HTML DOM持有MIT颁发的许可证。
特征:
- 它能够支持那些无效的HTML。
环境要求:
需要具有PHP 5以上的环境。
文档链接:
http://simplehtmldom.sourceforge.net/manual.htm
扩展阅读:
http://www.prowebscraper.com/blog/web-scraping-using-php/
3. htmlSQL
简介:
- 它实际上是一个实验性的PHP库。它的实用之处在于:通过它,您能够使用类似SQL的语法,去访问HTML的各种数值。因此,您可以在不需要编写复杂的函数、或正则表达式的情况下,方便地获取某些特定值。
- 如果您是SQL的忠实粉丝,那么您一定也会喜欢这款实验性的爬取库。
- 您可以将它运用到任何类型的杂项任务、以及对于网页的快速解析任务之中。
- 虽然早在2006年就停止了更新与支持,但是htmlSQL仍然是一款可靠的解析工具和抓取库。
- htmlSQL持有BSD颁发的许可证。
特征:
- 它能够提供相对快速的解析访问,但功能比较有限。
环境要求:
- 各种风格的PHP 4以上环境。
- Snoopy的PHP类(版本1.2.3,需选用Web传输)。
文档链接:
https://github.com/hxseven/htmlSQL
扩展阅读:
https://github.com/hxseven/htmlSQL/tree/master/examples
4. cURL
简介:
- 众所周知,cURL是一款非常流行的、可用于从网页中提取数据的工具库。它属于PHP的内置组件。
- 作为一个标准的PHP库,它并不包含任何第三方的文件和类。
环境要求:
- 在使用PHP的cURL功能时,您只需要安装»libcurl包(请详见http://curl.haxx.se/)便可。当然,作为PHP,它需要用到libcurl的7.10.5或更高版本。
文档链接:
http://php.net/manual/ru/book.curl.php
扩展阅读:
http://scraping.pro/scraping-in-php-with-curl/
5.Requests
简介:
- 它是一个用PHP编写的HTTP库。
- 它的API主要基于那些优秀的Requests Python库。
- 您能够通过Requests来发送HEAD、GET、POST、PUT、DELETE以及PATCH HTTP等请求。
- 通过Requests,您可以使用简单数组,来添加标题、表单数据、多个文件和参数、并能以相同的方式访问各种响应数据。
- Requests持有ISC颁发的许可证。
特征:
- 持有国际域名和URL。
- 支持浏览器式的SSL验证。
- 提供基本和摘要式的身份验证。
- 自解压功能(Automatic Decompression)。
- 连接超时管理。
环境要求:
需要具有PHP 5.2以上的版本。
参考文档:
https://github.com/rmccue/Requests/blob/master/docs/README.md
6. HTTPful
简介:
- HTTPful是一个非常简单的PHP库。由于其设计初衷是使得HTTP具有可读性,因此它本身既可以被作为链接,又具备一定的可读性。
- 它被公认为非常实用的原因在于:它使得开发人员专注于与API的交互,而不必去关注那些set_opt页面。同时,它也是一款十分优秀的PHP REST客户端。
- HTTPful持有MIT颁发的许可证。
特征:
- 可读式地支持多种HTTP方法(GET、PUT、POST、DELETE、HEAD、PATCH和OPTIONS)。
- 可自定义标题(Headers)。
- 能够自动且“智能”地进行解析。
- 能够自动进行载荷的序列化(Payload Serialization)。
- 支持基本认证。
- 提供客户端证书的身份验证。
- 带有请求的“模板”。
环境要求:
需要具有PHP 5.3以上的版本。
文档链接:
http://phphttpclient.com/docs/
7.Buzz
简介:
- Buzz是一种实用的轻量级工具库,您可以用它来发出HTTP请求。
- 虽然Buzz的设计比较简单,但是它具有各种Web浏览器的特性。
- Buzz持有MIT颁发的许可证。
特征:
- 简单的API。
- 具有高性能。
环境要求:
需要具有PHP 7.1版本。
文档链接:
https://github.com/kriswallsmith/Buzz/blob/master/doc/index.md
扩展阅读:
https://github.com/kriswallsmith/Buzz/tree/master/examples
8. Guzzle
简介:
- 作为一款非常实用的PHP HTTP客户端,Guzzle能够让您以简单的方式发送各种HTTP请求。同时,它也能很方便地与Web服务相集成。
特征:
- 通过其简单的界面,您可以构建出各种查询字符串、POST请求、大量的流式上传与下载、HTTP Cookie以及可上传的JSON数据。
- 它可以在同一个接口的帮助下,以同步和异步的方式发送各种请求。
- 它能够将PSR-7接口运用于各种请求、响应和数据流之中。您可以籍此使用Guzzle的其他PSR-7兼容库。
- 通过抽象出底层的HTTP传输,您可以用它来编写出独立于环境和传输的程序代码,即:不会对cURL、PHP流、套接字或非阻塞事件的循环产生强依赖性。
- 其中间件系统使您能够扩充和组合客户端的各种行为。
环境要求:
需要具有PHP 5.3.3以上版本。
文档链接:
http://docs.guzzlephp.org/en/stable/
扩展阅读:
https://lamp-dev.com/scraping-products-from-walmart-with-php-guzzle-crawler-and-doctrine/958
结论
综上所述,每一种网络爬取工具都具有自己的特点和环境要求。希望上述罗列能够帮助您更好地了解这些PHP库与工具。您可以从中挑选出适合于自己网站系统的工具进行试用与调试。
原文标题:8 Awesome PHP Web Scraping Libraries and Tools,作者:Hiren Patel
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】