
Web Scraping — это метод, используемый для извлечения данных с веб-сайтов. Это помогает автоматизировать процесс извлечения данных с веб-сайтов и файлов HTML. Как разработчик C#, мы можем легко проверять, захватывать и извлекать данные, такие как изображения, видео, аудио и т. д., с веб-страниц. В этой статье мы узнаем, как выполнять парсинг веб-страниц с помощью синтаксического анализа HTML с помощью C#.
В этой статье должны быть раскрыты следующие темы:
- C# API парсинга веб-страниц
- Чтение и извлечение HTML с помощью C#
- Проверка элементов документа с помощью C#
- Найти определенный элемент с помощью фильтров в C#
- Запрос данных из HTML с помощью C#
- Извлечь с помощью селектора CSS в C#
C# API парсинга веб-страниц
Для парсинга веб-страниц из HTML-файлов или URL-адресов мы будем использовать API Aspose.HTML для .NET. Это расширенный API обработки HTML, который позволяет генерировать, изменять, извлекать данные, преобразовывать и отображать HTML-документы без какого-либо внешнего программного обеспечения. Пожалуйста, загрузите DLL API или установите его с помощью NuGet.
PM> Install-Package Aspose.Html
Чтение и извлечение HTML с помощью C#
Мы можем читать и извлекать HTML из любого HTML-документа, выполнив следующие шаги:
- Загрузите HTML-документ с помощью класса HTMLDocument.
- Отобразите внутренний HTML-код файла на консоли.
В следующем примере кода показано, как читать и извлекать содержимое HTML с помощью C#.
// В этом примере кода показано, как отобразить содержимое HTML-документа
// Загрузить HTML-документ
var document = new HTMLDocument(@"D:\Files\html\input.html");
// Показать внутренний HTML документа
Console.WriteLine(document.Body.InnerHTML);

Чтение и извлечение HTML с помощью C#.
Точно так же мы можем читать и извлекать HTML с действующих веб-сайтов, как показано ниже:
// В этом примере кода показано, как отобразить содержимое URL-адреса действующего веб-сайта.
// Инициализировать URL-адрес
Url url = new Url("https://en.wikipedia.org/wiki/HTML");
// Загрузить файл HTML, используя экземпляр URL
HTMLDocument document = new HTMLDocument(url);
// Показать внутренний HTML файла на консоль
Console.WriteLine(document.Body.InnerHTML);
Проверка элементов документа с помощью C#
Мы можем проверить документ и его элементы, выполнив следующие шаги:
- Загрузите HTML-документ с помощью класса HTMLDocument.
- Получите HTML-элемент документа.
- Получить первый/последний элементы элемента HTML.
- Отображение сведений об элементе, таких как TagName, TextContent.
В следующем примере кода показано, как проверять элементы документа с помощью C#.
// В этом примере кода показано, как проверять элементы HTML.
// Загрузить документ из файла
string documentPath = @"D:\Files\html\input.html";
HTMLDocument document = new HTMLDocument(documentPath);
// Получить html-элемент документа
var element = document.DocumentElement;
Console.WriteLine(element.TagName); // HTML
// Получить последний элемент элемента html
element = element.LastElementChild;
Console.WriteLine(element.TagName); // BODY
// Получить первый элемент элемента body
element = element.FirstElementChild;
Console.WriteLine(element.TagName); // H1
Console.WriteLine(element.TextContent); // Header 1
Найти определенный элемент с помощью фильтров в C#
Мы можем использовать настраиваемые фильтры, чтобы найти определенный элемент, например, получить все изображения, ссылки и т. д. Для этой цели API предоставляет интерфейс TreeWalker. Это позволяет перемещаться по дереву или поддереву документа, используя представление документа, определяемое их флагами whatToShow и фильтром (если есть). Мы можем найти определенные элементы с помощью фильтров, выполнив следующие шаги:
- Определите фильтры с помощью класса NodeFilter и переопределите метод AcceptNode().
- Загрузите HTML-документ с помощью класса HTMLDocument.
- Вызовите метод CreateTreeWalker(). Он принимает корневой узел, что показывать и NodeFilter в качестве аргументов.
В следующем примере кода показано, как найти определенные элементы с помощью C#.
// В этом примере кода показано, как запрашивать данные с помощью фильтров.
// Загрузите HTML-документ
HTMLDocument document = new HTMLDocument(@"D:\Files\html\input.html");
// Чтобы начать HTML-навигацию, нам нужно создать экземпляр TreeWalker.
// Указанные параметры означают, что он начинает ходить с корня документа,
// итерация всех узлов и использование нашей пользовательской реализации фильтра
using (var iterator = document.CreateTreeWalker(document, Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
{
while (iterator.NextNode() != null)
{
// Поскольку мы используем собственный фильтр, текущий узел всегда будет экземпляром HTMLImageElement.
// Таким образом, нам не нужны дополнительные проверки здесь.
var image = (HTMLImageElement)iterator.CurrentNode;
System.Console.WriteLine(image.Src);
// вывод: image1.png
// вывод: image2.png
}
}
// В этом примере кода показано, как определить фильтр Node.
class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
{
public override short AcceptNode(Aspose.Html.Dom.Node n)
{
// Текущий фильтр пропускает все элементы, кроме элементов IMG.
return string.Equals("img", n.LocalName)
? FILTER_ACCEPT
: FILTER_SKIP;
}
}
Запрос данных из HTML с помощью C#
Мы также можем использовать XPath Query для запроса данных из HTML-документа, выполнив следующие шаги:
- Загрузите HTML-документ с помощью класса HTMLDocument.
- Вызовите метод Оценить(). Он принимает строку выражения XPath, документ и тип в качестве аргументов.
- Наконец, прокрутите полученные узлы и отобразите текст
В следующем примере кода показано, как запрашивать данные с помощью запросов XPath с помощью C#.
// В этом примере кода показано, как запрашивать данные с помощью запроса XPath.
// Подготовьте HTML-код
var code = @"
<div class='happy'>
<div>
<span>Hello!</span>
</div>
</div>
<p class='happy'>
<span>World</span>
</p>
";
// Инициализировать документ на основе подготовленного кода
HTMLDocument document = new HTMLDocument(code, ".");
// Здесь мы оцениваем выражение XPath, где мы выбираем все дочерние элементы SPAN.
// из элементов, чей атрибут «класс» равен «счастливому»:
var result = document.Evaluate("//*[@class='happy']//span",
document,
null,
Aspose.Html.Dom.XPath.XPathResultType.Any,
null);
// Перебрать полученные узлы
for (Aspose.Html.Dom.Node node; (node = result.IterateNext()) != null;)
{
System.Console.WriteLine(node.TextContent);
// вывод: привет
// вывод: Мир!
}
Извлечь с помощью селектора CSS в C#
Мы также можем извлекать содержимое HTML с помощью селекторов CSS. Для этой цели API предоставляет метод QuerySelectorAll(), который позволяет перемещаться по HTML-документу и искать нужные элементы. Он принимает селектор запросов в качестве параметра и возвращает соответствующий NodeList всех элементов. Мы можем запросить с помощью селекторов CSS, выполнив следующие шаги:
- Загрузите HTML-документ с помощью класса HTMLDocument.
- Вызовите метод QuerySelectorAll(). Он принимает селектор запросов в качестве аргумента.
- Наконец, прокрутите полученный список элементов.
В следующем примере кода показано, как извлечь содержимое HTML с помощью селекторов CSS в C#.
// Инициализировать документ на основе подготовленного кода
HTMLDocument document = new HTMLDocument(@"D:\Files\html\input.html");
// Здесь мы создаем селектор CSS, который извлекает все элементы div.
var elements = document.QuerySelectorAll("div");
// Перебрать полученный список элементов
foreach (Aspose.Html.HTMLElement element in elements)
{
System.Console.WriteLine(element.InnerHTML);
}
Получить бесплатную лицензию
Попробуйте API без ознакомительных ограничений, запросив бесплатную временную лицензию.
Вывод
В этой статье мы узнали, как:
- читать и извлекать содержимое HTML-документа с помощью C#;
- проверять элементы документа и находить определенный элемент в HTML;
- данные, специфичные для запроса, и извлечь данные с помощью CSS Selector.
Кроме того, вы можете узнать больше об Aspose.HTML для .NET API, используя документацию. В случае возникновения каких-либо неясностей, пожалуйста, свяжитесь с нами на форуме.