CoderCastrov logo
CoderCastrov
C Sharp Программирование

5 лучших парсеров HTML на C#

5 лучших парсеров HTML на C#
просмотров
8 мин чтение
#C Sharp Программирование

Парсинг данных похож на извлечение металлов из кучи мусора. Когда мы занимаемся парсингом веб-страниц, мы получаем большое количество данных, которые для нас совершенно бесполезны. В этот момент мы используем парсер 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#. Я знаю, что выбор правильной библиотеки для вашего проекта может быть немного запутанным, но вам нужно попробовать их одну за другой, чтобы найти подходящий вариант.

Надеюсь, вам понравился этот небольшой учебник, и если да, то пожалуйста, не забудьте поделиться им с друзьями и в социальных сетях.

Дополнительные ресурсы

Вот несколько дополнительных ресурсов, которые могут быть полезными во время вашего путешествия по парсингу: