用于网页抓取的最佳 HTML 解析库

探索用于网页抓取和数据提取的最佳HTML解析器,包括httpx、AIOHTTP和urllib。
2 min read

在这篇比较文章中,您将了解到:

  • HTML 解析器的定义以及您为什么需要解析器
  • 比较最好的 HTML 解析器时要考虑些什么
  • 最好的 HTML 解析库是什么

让我们开始吧!

什么是 HTML 解析器?

HTML 解析器是一个用于解析 HTML 文档的程序库。通常,它还可以解析 XML。换句话说,HTML 解析器处理 HTML 代码并将其转换为易于导航和操作的结构化数据格式。他们生成的是与 HTML 页面关联的 DOM 的更易于了解的表达式。

HTML 解析器通常将本地文件、URL 或原始 HTML 字符串进行输入。然后,他们开始逐个字符分析 HTML 代码,识别不同的元素,例如标签、属性和内容。解析 XML/HTML 文档时,他们会构建一个树状结构,其中包含 HTML 文档的分层表达式。

HTML 解析库最重要的用例之一是 网页抓取。例如,假设您要从在线购物网站检索产品信息。您可以使用 HTTP 客户端检索与目标页面关联的 HTML 文档。下一步,将该 HTML 内容提供给 HTML 解析器。使用其 API 导航解析树,查找和提取相关信息,例如产品名称、价格等。

为了针对 DOM 上的特定 HTML 元素,HTML 解析器通常支持基于 CSS 选择器 或 XPath 表达式的节点选择器策略。给定一个 HTML 节点,它们通常就会提供提取其文本内容或读取其属性值的方法。

评估最佳 HTML 解析库时所要考虑的元素

比较可用的最佳 HTML 解析器时所要考虑的最重要的因素如下:

  • 优缺点:库的主要优点和缺点。
  • 编程语言:软件包所用的编程语言。
  • GitHub 星星数:与 HTML 解析库相关的存储库在 GitHub 上的星星数量。
  • CSS 选择器支持:HTML 解析器是否内置支持 CSS 选择器。
  • XPath 支持:程序库是否内置支持 XPath 表达式。

现在让我们应用这些标准来评估 IT 领域的最佳 HTML 解析器吧!

排名前 7 的 HTML 解析器

该是了解最好的 HTML 解析库的时候了。 

1. jsoup 

jsoup 是一个强大的 Java 库,专为解析 HTML 文档而设计。最重要的是,它还带有一个完整的API,用于通过 CSS 选择器或 XPath 表达式进行 HTML 操作和数据提取。作为一个多合一的抓取库,它还为从网址中提取 HTML 提供一种易于使用的方法。借助我们的 jsoup 网页抓取指南成为行家里手。  

👍 优点

  • 执行 WHATWG HTML 规范
  • 库中包含 HTTP 客户端
  • 包含大量方法和实用程序的 Vast API
  • 完整的 API 文档 可在线获得

👎 缺点

  • 不是最快的 HTML 解析器

💻 编程语言:Java  

GitHub 星星数:10.5k  

🔎 CSS 选择器支持:是  

🔎 XPath 支持:是 

2.Nokogiri 

Nokogiri 提供一个易于理解的 AP,用于在 Ruby 中读取、编写、修改及查询 XML 和 HTML 文档。它速度快且符合标准,这使其无法成为最好的 HTML 解析器。在内部,它依赖于 libxml2、libgumbo 和 xerces 等本地解析器。  

👍 优点

  • 它默认安全,因为它将所有文档视为不可信
  • CSS3 选择器,带有一些类似 jQuery 的扩展程序
  • 完整的 API 文件
  • 社区维护的 备忘单

👎 缺点

  • 不是最常用的 HTML 解析库

💻 编程语言:Ruby  

GitHub 星星数: 6.1k  

🔎 CSS 选择器支持:是  

🔎 XPath 支持:是 

3.Beautiful Soup 

Beautiful Soup 是一个 Python 库,用于解析 HTML 和 XML 文档和文件,以从中提取数据。它提供导航、搜索和修改解析树的直观方法。它支持多个底层解析器,具有许多高级功能,例如 HTML 代码美化器。请在我们有关 Beautiful Soup 网页抓取的教程中了解更多信息。  

👍 优点

  • 不同的底层解析器
  • 最广泛使用的 HTML 解析库之一
  • HTML 和 XML 代码格式化功能
  • 快速发布

👎 缺点

  • 没有 API 文件
  • 不提供对 XPath的本地支持

💻 编程语言:Python  

GitHub 星星数: —(不在 GitHub 上)  

🔎 CSS 选择器支持:是  

🔎 XPath 支持:不提供本地支持,但可以通过 lxml 包 获得本地支持

4.Cheerio 

Cheerio 提供一个综合以 jQuery 为灵感的 API,用于在 JavaScript 中解析 HTML。如果您已经熟悉 jQuery,便可马上充分利用这个库。Cheerio 使用非常简单且一致的 DOM 表达式模型,将性能作为重中之重。请在我们有关 Cheerio 网页抓取的分步教程中了解更多信息。  

👍 优点

👎 缺点

  • 仍处于测试阶段
  • 没有 XPath 本地支持

💻 编程语言:JavaScript (Node.js)  

GitHub 星星数: 27.6k 

🔎 CSS 选择器支持:是  

🔎 XPath 支持:否 

5.Html Agility Pack 

Html Agility Pack,也称为 “HAP”,是一款用 C# 编写的 HTML 解析器,用于读取和编写 HTML 文档。它支持基本 XPATH 和 XSLT,但不支持 CSS 选择器。大多数开发人员认为它是解析 “网外” HTML 的首选.NET 库。虽然并非最受欢迎,但它仍然是最好的 HTML 解析器之一。请在我们的 Html Agility Pack 抓取教程中查看解析器的实际运行情况。  

👍 优点

  • 适用于任何 .NET 兼容语言
  • XSLT 支持
  • 频繁发布

👎 缺点

  • 几乎没有文档
  • 不提供对 CSS 选择器的本地支持

💻 编程语言:C#  

GitHub 星星数: 2.5k  

🔎 CSS 选择器支持:不提供本地支持,但可以通过 htmlAgilitypack.csSelector 扩展程序 获得本地支持 

🔎 XPath 支持:是 

6. libxml2 

libxml2 是一个 C 库,最初作为解析 XML 的 GNOME 项目的一部分而开发。与大多数 C 库一样,它使用低级数据结构提供极高的性能。这就是许多其他高级 HTML 解析器在后台使用它的原因。  

👍 优点

  • 被许多其他解析库使用
  • 极限性能

👎 缺点

  • 复杂 API
  • 不适合新手
  • 仅限于 XPath

💻 编程语言:C  

GitHub 星星数: —(不在 GitHub 上)  

🔎 CSS 选择器支持:否  

🔎 XPath 支持:是 

7.PHPHtmlParser 

phphtmlParser 是一个简单灵活的 HTML 解析器,以 PHP 编写,用于使用 CSS 选择器选择 DOM 中的节点。它的主要目标是协助开发 PHP 抓取脚本。它也可以很好地处理非标准和损坏的 HTML。  

👍 优点

  • 可以解析损坏的 HTML
  • 用于网页抓取的完整 API

👎 缺点

  • 不主动维护
  • 没有文档记录
  • 没有 XPath 本地支持

💻 编程语言:PHP  

GitHub 星星数: 2.3k  

🔎 CSS 选择器支持:是  

🔎 XPath 支持:否

最好的 HTML 解析器:摘要表

将最好的 HTML 解析器与下面的摘要表进行比较:

HTML 解析器编程语言GitHub 星星数CSS 选择器XPath
jsoupJava10.5k
NokogiriRuby6.1k
Beautiful SoupPython可通过额外的相依关系
CheerioJavaScript27.6k
Html Agility PackC#2.5k可通过扩展程序
libxml2C
phphtmlParserPHP2.3k

大功告成!您现在是 HTML 解析库行家了!

结语

在本指南中,您了解了一些适用于不同技术的最佳 HTML 解析库。能否找到满足您的需求的最佳工具,取决于您要使用的编程语言以及您的项目的独特要求。在这里,您有机会找到一些最好的 HTML 解析器。

无论您做出何种选择,请记住,网站可以通过其反机器人技术对您加以阻止。值得庆幸的是, Bright Data 可以满足您的需求!我们的轮换 代理 可在超过 195 个国家/地区使用,可以通过任何 HTTP 客户端检索所要解析的 HTML。如果您在寻找功能齐全的解决方案, Scraping Browser(抓取浏览器) 则有一个内置 HTML 解析器,它还可以为您解决验证码、IP 禁令和速率限制等问题。毫无问题地解析任何 HTML 文件!