5 лучших парсеров HTML на C#
Table Of Content
Парсинг данных похож на извлечение металлов из кучи мусора. Когда мы занимаемся парсингом веб-страниц, мы получаем большое количество данных, которые для нас совершенно бесполезны. В этот момент мы используем парсер HTML, чтобы извлечь полезные данные из сырых данных, полученных с целевого веб-сайта при его парсинге.
В этом руководстве мы расскажем о некоторых из самых популярных парсеров HTML на C#. Мы обсудим их по одному, и после этого вы сможете сделать собственные выводы. В конце у вас будет четкое представление о том, какую библиотеку следует использовать при парсинге данных на C#.
Html Agility Pack(HAP)
HTML Agility Pack aka HAP - самый широко используемый парсер HTML
в сообществе C#
. Он используется для загрузки, парсинга и манипуляции HTML-документами. Он имеет возможность парсить HTML из файла, строки или даже URL. Он поставляется с поддержкой XPath
, которая может помочь вам идентифицировать или найти конкретные элементы HTML
внутри DOM. Из-за этой причины он довольно популярен в проектах парсинга веб-страниц.
Особенности
- HAP может помочь вам удалить опасные элементы из HTML-документов.
- В рамках среды
.NET
вы можете манипулировать HTML-документами. - Он имеет низкое потребление памяти, что делает его дружественным для больших проектов. Это в конечном итоге также снижает затраты.
- Его встроенная поддержка
XPath
делает его первым выбором для разработчиков.
Пример
Давайте посмотрим, как мы можем использовать HAP для парсинга HTML и извлечения тега title из следующего примера HTML.
<div class="test1"><p class="title">Гарри Поттер</p></div>
Мы будем использовать SelectSingleNode
, чтобы найти тег p
внутри этого исходного HTML
.
using HtmlAgilityPack;
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("<div class='test1'><p class='title'>Гарри Поттер</p></div>");
HtmlNode title = doc.DocumentNode.SelectSingleNode("//p[@class='title']");
if (title != null)
{
Console.WriteLine(title.InnerText);
}
Вывод будет Гарри Поттер. Очевидно, что это всего лишь небольшой пример парсинга. Эта библиотека также может использоваться для более сложного парсинга.
Преимущества
- API довольно прост для парсинга
HTML
. Даже новичок может использовать его без особых проблем. Это удобная для разработчиков библиотека. - Поскольку она поддерживает несколько вариантов кодировки, парсинг
HTML
становится еще проще. - Благодаря большому сообществу, решение ошибок для новичков не будет проблемой.
Недостатки
- Она не может парсить javascript.
- Пока что поддержка
HTML5
ограничена. - Обработка ошибок происходит в довольно старом стиле. Сообществу нужно обратить на это внимание.
- Она предназначена исключительно для парсинга
HTML
документов. Поэтому, если вы планируете парситьXML
, вам придется выбрать другую библиотеку для этого.
AngleSharp
Это легковесная библиотека для парсинга HTML и CSS на основе .NET. Она поставляется с чистой документацией, что делает ее популярной среди разработчиков. AngelSharp помогает вам, предоставляя интерактивное DOM при парсинге любого веб-сайта.
Особенности
- Она имеет функцию выбора селектора CSS. Это делает извлечение данных через HTML и CSS чрезвычайно простым.
- С помощью пользовательских классов вы можете обрабатывать любой конкретный тип элемента.
- Встроенная поддержка HTML5 и CSS3. Благодаря этому она становится совместимой с новыми технологиями.
- Она совместима с .NET Framework. Это открывает много возможностей для совместимости с различными библиотеками.
Пример
Давайте посмотрим, как работает AngleSharp на том же HTML-коде, использованном выше.
using AngleSharp.Html.Parser;
var parser = new HtmlParser();
var document = parser.Parse("<div class='test1'><p class='title'>Гарри Поттер</p></div>");
var title = document.QuerySelector("p.title").TextContent;
Console.WriteLine(title); // Вывод: Гарри Поттер
Здесь сначала мы использовали HtmlParser
для разбора HTML-строки в объект AngleSharp.Dom.IHtmlDocument
. Затем с помощью QuerySelector
мы выбрали p
тег с классом title
. И, наконец, с помощью TextContent
мы извлекли текст.
Преимущества
- У него лучший механизм обработки ошибок по сравнению с HAP.
- Он быстрее по сравнению с другими библиотеками, такими как HAP.
- Он имеет встроенную поддержку парсинга JavaScript.
- Он поддерживает новые технологии, такие как
HTML5
иCSS3
.
Недостатки
- У него меньшее сообщество, чем у HAP, что затрудняет начинающим преодоление возможных проблем при использовании AngelSharp.
- Он не поддерживает
Xpath
. - Вы не можете разбирать и изменять формы
HTML
с помощью AngleSharp. - Не является хорошим выбором для разбора документов
XML
.
Awesomium
Awesomium можно использовать для отображения любого веб-сайта. Создав экземпляр, вы можете перейти на веб-сайт и, используя DOM API, взаимодействовать с страницей. Он построен на базе Chromium Embedded Framework
(CEF) и предоставляет отличный API для взаимодействия с веб-страницей.
Особенности
- API прост в использовании, что делает взаимодействие с страницей очень простым.
- Браузерные функции, такие как уведомления и диалоговые окна, также поддерживаются этой библиотекой.
- Работает на Mac, Linux и Windows.
Пример
Поскольку Awesomium является движком веб-автоматизации, а не библиотекой парсинга, мы напишем код для отображения www.scrapingdog.com с его помощью.
using Awesomium.Core;
using Awesomium.Windows.Forms;
using System.Windows.Forms;
namespace DisplayScrapingdog
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// Инициализируем WebCore
WebCore.Initialize(new WebConfig()
{
// Добавьте здесь любые настройки конфигурации
});
// Создаем новый WebControl
var webView = new WebControl();
// Добавляем WebControl на форму
this.Controls.Add(webView);
// Переходим на веб-сайт
webView.Source = new Uri("https://www.scrapingdog.com/");
}
}
}
Преимущества
- Это легкая библиотека благодаря низкому использованию памяти.
- Она совместима с
HTML5
,CSS3
и Javascript, что делает ее популярной среди разработчиков. - Это независимая библиотека, которая не требует дополнительных обязательств для извлечения
**сырых данных**
. - Вы можете парсить динамические веб-сайты с помощью Awesomium, но для извлечения важных данных из сырых данных вам потребуется дополнительная библиотека.
Недостатки
- У нее ограниченная поддержка сообщества. Решение проблем без поддержки сообщества может быть очень сложным для разработчиков, использующих ее в своих проектах парсинга.
- Она не поддерживает все браузеры. Поэтому парсить определенные веб-сайты может быть невозможно.
- Она не является открытым исходным кодом. Поэтому вы можете столкнуться с проблемами авторских прав и придется платить за использование.
Fizzler
Fizzler - это еще одна библиотека парсинга, построенная на основе HAP. Синтаксис небольшой и довольно понятный. Она использует пространства имен для уникальной идентификации объектов. Это библиотека .NET
, которая не получает активной поддержки от сообщества.
Возможности
- С помощью селектора
CSS
вы можете фильтровать и извлекать элементы из любогоHTML
документа. - Поскольку у нее нет внешних зависимостей, она довольно легкая.
- Fizzler также предоставляет возможность использования селекторов
CSS
. Вы можете легко искать поID
,class
,type
и т. д.
Пример
Поскольку он построен на основе HAP, синтаксис будет выглядеть похожим на него.
using System;
using Fizzler.Systems.HtmlAgilityPack;
using HtmlAgilityPack;
var html = "<div class='test1'><p class='title'>Гарри Поттер</p></div>";
var doc = new HtmlDocument();
doc.LoadHtml(html);
var title = doc.DocumentNode.QuerySelector(".title").InnerText;
Console.WriteLine(title);
Преимущества
- В отличие от Awesomium, это бесплатный open-source пакет, вам не придется платить ни за что.
- CSS-селектор может помочь вам разбирать любой веб-сайт, даже если это динамический javascript-сайт.
- Быстрая производительность снижает задержку сервера.
Недостатки
- Возможно, он не будет работать так хорошо, как другие библиотеки, с большими HTML-документами.
- Ресурсы поддержки или учебные пособия по Fizzler очень малы.
Selenium WebDriver
Я думаю, вы уже знаете, что Selenium способен делать. Это самый популярный инструмент для веб-автоматизации, который может работать с практически любым языком программирования (C#, Python, NodeJS и т. д.). Он может работать в любом браузере, включая Chrome, Firefox, Safari и т. д.
Он предоставляет возможность интеграции с тестовыми фреймворками, такими как TestNG и JUnit.
Пример
Опять же, как и Awesomium, это инструмент для веб-автоматизации. Поэтому мы будем отображать www.scrapingdog.com с помощью Selenium.
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
class Program
{
static void Main(string[] args)
{
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("http://books.toscrape.com/");
Console.WriteLine(driver.Title);
driver.Quit();
}
}
Здесь мы используем конструктор ChromeDriver
для открытия браузера Chrome. Затем, используя GoToUrl()
, мы переходим на целевой веб-сайт. driver.Title
выведет заголовок веб-сайта, а затем, используя driver.Quit()
, мы закрываем браузер.
Особенности
- Вы можете записывать видео, делать снимки экрана и даже регистрировать сообщения консоли. Это полноценный инструмент для автоматизации тестирования веб-приложений.
- Поддерживает практически все браузеры и практически все языки программирования.
- Вы можете нажимать кнопки, заполнять формы и перемещаться между несколькими страницами.
Преимущества
- Очевидным преимуществом является возможность работы с практически всеми браузерами и языками программирования.
- Вы можете запустить его в режиме без графического интерфейса, что в конечном итоге снижает затраты ресурсов и способствует более быстрому выполнению.
- CSS-селекторы и XPath могут оба работать с Selenium.
- Сообщество очень большое, поэтому даже начинающий может быстро научиться и создать парсер веб-страниц.
Недостатки
- Он не поддерживает тестирование мобильных приложений. Хотя есть некоторые альтернативы для этого.
- Он не поддерживает SSL-шифрование. Поэтому тестирование веб-сайтов с высоким уровнем безопасности с использованием Selenium не будет отличной идеей.
- Для запуска на нескольких разных экземплярах браузера требуется отдельный драйвер.
Заключение
На сегодняшний день в целом Selenium Web driver является наиболее используемым инструментом для автоматизации веб-приложений благодаря его совместимости со всеми популярными языками программирования, но он может быть медленным из-за использования реальных браузеров.
Awesomium и Fizzler - оба отличные библиотеки для разбора HTML, но Awesomium предлагает быстрые API для отображения веб-сайтов. С другой стороны, Fizzler тоже может использоваться для небольших задач по сбору данных с веб-сайтов, но он не так хорошо оснащен, как Selenium. Лично я предпочитаю комбинацию Selenium и Fizzler.
Я надеюсь, что этот статья дала вам представление о самых популярных инструментах/библиотеках для парсинга веб-страниц и разбора HTML в C#. Я знаю, что выбор правильной библиотеки для вашего проекта может быть немного запутанным, но вам нужно попробовать их одну за другой, чтобы найти подходящий вариант.
Надеюсь, вам понравился этот небольшой учебник, и если да, то пожалуйста, не забудьте поделиться им с друзьями и в социальных сетях.
Дополнительные ресурсы
Вот несколько дополнительных ресурсов, которые могут быть полезными во время вашего путешествия по парсингу:
- Парсинг веб-страниц с использованием C#
- Парсинг веб-страниц с использованием Python
- Парсинг веб-страниц с использованием Rust
- Парсинг веб-страниц с использованием Go