八大神奇的网络爬取库与工具

译文
开发 后端 开发工具
在本文中,我们将和您探讨八种实用的网络爬取库与工具,以满足您直接抓取网站信息和数据的业务需求。

[[261366]]

【51CTO.com快译】网络爬取(Web scraping,请详见:http://www.prowebscraper.com/blog/web-scraping-using-php/)是普通商业网站的常规功能之一。不同的网站在不同的应用场景下,会用到不同的爬取任务,其中包括:产品信息和股票价格等方面。

与此同时,在网站系统的后端开发中,网络爬取也是备受关注。在程序员的圈子内,您会经常听到:又有人开发创建了高质量的解析器或“爬虫”之类的新闻。

在本文中,我们将和您探讨一些实用的网络爬取库与工具,以满足您直接抓取网站信息和数据的业务需求。

在PHP环境中,您可以通过如下工具库,来进行与网络抓取相关的各项操作:

  1. Goutte
  2. Simple HTML DOM
  3. htmlSQL
  4. cURL
  5. Requests
  6. HTTPful
  7. Buzz
  8. 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】

责任编辑:庞桂玉 来源: 51CTO
相关推荐

2018-11-04 11:59:03

神经网络机器学习深度学习

2018-11-01 14:59:42

2022-06-09 08:23:33

预测分析工具人工智能

2018-02-06 15:40:50

2012-05-05 09:28:50

三星

2010-04-19 11:23:26

Oracle开发工具

2023-05-17 15:22:45

识别开源工具

2016-08-24 15:39:46

ownCloud存储服务器

2011-04-29 09:15:16

Servlet

2009-06-22 14:07:46

JSF优势

2021-03-10 10:30:09

网络企业网络趋势

2012-01-10 10:39:12

云计算网络管理

2023-05-31 12:01:22

2019-11-21 09:46:19

漏洞补丁管理攻击

2022-01-05 09:26:56

IT灾难IT故障

2012-02-09 10:46:24

2015-11-10 20:16:13

网络诈骗网购安全

2011-01-26 09:28:32

PowerShellShell

2012-05-11 11:53:36

虚拟化

2011-07-11 14:01:12

JAVA
点赞
收藏

51CTO技术栈公众号