in

C# HTML解析器介绍

C# HTML解析器介绍

当试图从互联网上检索大量数据时,网页爬取是必不可少的,而这一过程中最关键的部分是HTML解析,或从HTML代码中提取需要的数据。

如果你需要一个HTML解析器,你可能会被众多的选择弄得不知所措。这些是需要记住的基本标准。

  1. 它必须是开源的、免费的。

  2. 它必须提供合理的文件。

  3. 库必须得到积极维护。

本文将根据这些规则分析五个HTML解析库,以便你在你的项目中可以考虑它们。

注意:提到的一些库并不严格用于HTML解析;它们可用于网络自动化或作为任何一般超文本语言(如HTML、XML、MathML)的解析器。


Html Agility Pack

Html Agility Pack(HAP)是一个使用C#解析HTML的基本库。它也是本文中提到的其他库之一Fizzler的依赖项。HAP比其他库的功能更多,允许你使用同一个库来爬取网站并直接解析它们。

HAP提供什么。

  1. 它可以通过HTTP请求自动获得HTML源文件,而其他库很少内置这种功能。

  2. 与其他库相比,它提供了更干净的结果。一般来说,内联的HTML被删除,给你提供纯文本。

HAP可用于新版本的.NET,包括.NET Core 3.1和.NET 5。

优点

  • HAP是C#中最快的HTML解析器之一,在与其他库的基准测试中取得了第一名。其结果包括从一个提供的URL中检索HTML源。

  • 它为你省去了删除未使用的内联HTML标签的麻烦。

  • 它可以通过Fizzler进行扩展,在库中加入一个CSS选择器。

  • 它得到了积极的维护,有频繁的更新和良好的文档。

  • 它比其他库更直接,为那些想快速工作的开发者提供了很好的体验。

弊端

  • HAP只允许你查询XPath和HTML标签。它不支持CSS选择器。

  • 如果你需要从内联的HTML标签中检索数据,你可能很难使用Html Agility Pack的更清洁的改变源。

你可以使用NuGet软件包管理器安装Html Agility Pack


AngleSharp

AngleSharp为你提供了解析超文本源文件的功能,并且可以作为一个事实上的无头浏览器,因为它返回的响应与最先进的浏览器相似。该库自2013年以来一直在持续维护。

AngleSharp提供什么。

  1. AngleSharp的响应是原始的,如果你喜欢一个不改变结果的HTML解析器,这很有用。

  2. AngleSharp是最具有扩展性的库之一,你可以使用许多替代库来使其更加强大(AngleSharp.XPath和AngleSharp.Css,仅举几例)。

AngleSharp和Html Agility Pack一样,是比较流行的HTML解析器库之一,也是维护得最好的一个。它可用于.NET框架和.NET标准。

优点

  • AngleSharp是目前最快的C# HTML解析器库之一,在基准测试中仅次于Html Agility Pack。该基准包括HTTP请求来检索HTML源。

  • 它返回一个原始的HTML源,而不是一个经过修改的源,使你更容易从HTML标签中检索各种数据。

  • AngleSharp有许多不同的版本,包括用于支持XPath的AngleSharp.XPath和用于加强CSS选择器支持的AngleSharp.Css。

  • 它得到了积极的维护,频繁的更新和良好的文档。

  • 这是一个古老的图书馆,经得起时间的考验。

  • 它提供了一个广泛的工具集,让开发者有更多的自由来做他们想做的事情。

弊端

  • AngleSharp只提供本地HTML标签选择器支持。你需要安装单独的包来使用XPath或CSS选择器进行查询。

  • 它不会为你检索HTML源代码。相反,你必须使用一个HTTP客户端发出一个HTTP请求。

你可以通过使用NuGet来安装AngleSharp,包括AngleSharp.XPath。


Fizzler

Fizzler是一个建立在Html Agility Pack之上的CSS选择器引擎。它可以作为Html Agility Pack的一个扩展,与AngleSharp相似。Fizzler也以JavaScript对应的选择器命名(即QuerySelector)。

Fizzler在这个名单上得到的支持最少。截至目前,最后一次重大更新是在十个月前。不过,该库仍在积极维护。

Fizzler提供了与Html Agility Pack类似的功能,并分享其处理速度。Fizzler是一个.NET标准1.0库。

优点

  • Fizzler提供了常规Html Agility Pack库的优点,并增加了对CSS选择器的支持。

  • 它使你能够使用提供的URL获得并解析HTML,并使用Html Agility Pack进行检索。

  • 它是Html Agility Pack的一个字面的CSS选择器扩展,给开发者一个使用CSS选择器的工具,而不需要改变库。

弊端

  • Fizzler被积极维护,但与其他库相比,它是最不活跃的项目之一。

  • 它的文档并不完善,唯一的例子是在Fizzler主Git仓库的README.md文件中提供的。

你可以使用NuGet来安装Fizzler


CefSharp

CefSharp是Chromium Embedded Framework C#的缩写,是一个从C#操作Chromium驱动程序的库。Chromium驱动既可以作为无头浏览器使用,也可以作为Windows Forms应用程序中的用户界面的一部分。

CefSharp类似于Selenium这样的Web自动化工具。但与Selenium不同,CefSharp没有内置的HTML解析器。你需要使用一个外部的HTML解析器库,如AngleSharp或Html Agility Pack。

CefSharp库有很多,但CefSharp.OffScreen类似于一个无头浏览器,当你初始化Chromium时就会运行。与Selenium的Web驱动相比,CefSharp给开发者带来了实用性,因为你不需要定义Chromium驱动二进制文件的路径来使其工作。CefSharp会自动为你在项目的依赖关系中设置一个Chromium驱动。

优点

  • CefSharp运行一个无头的Chromium驱动,使其成为一个能够从复杂的网站上爬取大量数据的无头浏览器。

  • 它是这个列表中维护时间最长的库,在.NET社区中仍然很受欢迎(主要是因为它在WinForms中作为一个嵌入式浏览器的能力)。

弊端

  • CefSharp只能用来爬取网站,不能用来解析网站。如果你把它和一个外部的HTML解析库结合起来,比如Html Agility Pack,会有帮助。

为了在你的.NET Core项目中使用CefSharp,你可以使用NuGet安装CefSharp.Offscreen.NETCore


Selenium WebDriver

Selenium是一套帮助网络自动化的工具,最突出的是质量保证测试。你可以使用Selenium工具,通过你的代码打开网络浏览器并与之互动,然后检索出响应。

与CefSharp一样,Selenium是一个无头浏览器,你可以通过C#代码执行。虽然Selenium可以作为一般的质量保证测试工具,但它没有明确用于HTML解析,使用起来可能过于笼统。

优点

  • Selenium在引擎盖下运行一个无头浏览器,使其能够从网站上爬取数据。

  • 它可以说是最著名的质量保证测试库,有大量的教程和文档可用。

  • Selenium有一个内置的HTML分析器,可以使用XPath从HTML源文件中检索数据。

  • Selenium使开发者能够有一个细化的控制水平。

弊端

  • Selenium要求你安装Chromium驱动,因此与其他库相比,它的安装更为复杂。

  • 仅仅使用Selenium来解析HTML似乎有些过分,因为该库更多地被用于质量保证。

  • 因为它依赖于无头浏览器,所以它是这个名单上最慢的HTML解析工具。

你需要安装其中的两个库。Selenium.WebDriver和Selenium.WebDriver.ChromeDriver。


总    结

上面列出的所有库都提供了可能吸引你的特性和功能。一般来说,最受欢迎的选择是Selenium,其次是AngleSharp、CefSharp、Html Agility Pack和Fizzler。对于开发者的经验来说,Html Agility Pack似乎是最好的选择,而Fizzler则为该库的功能提供了一个很好的补充。

如果你想直接解析HTML文件,可以考虑使用AngleSharp, Html Agility Pack, 和Fizzler。要解析网页的URL,Html Agility Pack与Fizzler是一个不错的选择,因为它们可以按URL解析HTML。如果你需要模拟浏览器的动作来进入你要解析的页面,可以考虑使用Selenium和CefSharp。

每个库都有其优点和缺点,但你可能会发现所有这些库都值得尝试,这取决于你的使用情况。

 

blank

Written by 爬取 大师

阿里P12级别选手,能够突破各种反爬, 全能的爬取大师,擅长百万级的数据抓取!没有不能爬,只有你不敢想,有爬取项目可以联系我邮箱 [email protected] (带需求和预算哈, 不然多半不回复)