Веб-скрейпинг, также известный как веб-сканирование, веб-сбор или сбор данных, используется для извлечения данных с веб-сайтов. Веб-скрапер использует различные селекторы данных, такие как селекторы CSS, XPath или и то, и другое, для извлечения данных с веб-страниц. Оба этих селектора эффективны для сбора и анализа информации из Интернета. В этой статье рассказывается, как создать веб-скребок на C#, в частности, информация о навигации по HTML, XPath Query и CSS Selector.
- Конфигурация библиотеки веб-скрейпинга C#
- Веб-скрейпинг с HTML-навигацией в C#
- Веб-скрейпинг с использованием XPath Query в C#
- Веб-скрейпинг с помощью селектора CSS в C#
Конфигурация библиотеки веб-скрейпинга C#
Aspose.HTML для .NET — это библиотека веб-скрейпинга, которую можно легко настроить, загрузив эталонные DLL-файлы из раздела Новые выпуски или выполнив следующую команду установки NuGet. :
PM> Install-Package Aspose.Html
Веб-скрейпинг с HTML-навигацией в C#
Вы можете использовать различные свойства класса Node для навигации по документам HTML. Фрагмент кода ниже объясняет, как перемещаться по веб-странице HTML в C#:
// Подготовить HTML-код
var html_code = "<span>Hello</span> <span>World!</span>";
// Инициализировать документ из подготовленного кода
using (var document = new Aspose.Html.HTMLDocument(html_code, "."))
{
// Получить ссылку на первый дочерний элемент (первый SPAN) BODY
var element = document.Body.FirstChild;
Console.WriteLine(element.TextContent); // output: Hello
// Получить ссылку на пробел между элементами html
element = element.NextSibling;
Console.WriteLine(element.TextContent); // output: ' '
// Получить ссылку на второй элемент SPAN
element = element.NextSibling;
Console.WriteLine(element.TextContent); // output: World!
}
Проверка HTML-документа и его элементов
API также обеспечивает обобщенное использование функций обхода элементов. В следующем фрагменте кода показано, как выполнить детальную проверку различных элементов API.
//Загрузить документ из файла
string documentPath = System.IO.Path.Combine(DataDir, "html_file.html");
// Укажите путь к исходному HTML-файлу в вашей локальной файловой системе.
using (var document = new Aspose.Html.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#
Пользовательский фильтр можно реализовать с помощью объекта интерфейса ITreeWalker или INodeIterator вместе с реализацией пользовательского фильтра. Следующий фрагмент кода объясняет, как выполнить этот процесс:
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;
}
}
После внедрения пользовательского фильтра вы можете быстро перемещаться по веб-странице с помощью следующего кода:
var code = @"
<p>Hello</p>
<img src='image1.png'>
<img src='image2.png'>
<p>World!</p>";
// Инициализировать документ на основе подготовленного кода
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
// Чтобы начать HTML-навигацию, нам нужно создать экземпляр TreeWalker.
// Указанные параметры означают, что он начинает ходить с корня документа, перебирая все узлы и используя нашу кастомную реализацию фильтра
using (var iterator = document.CreateTreeWalker(document, Aspose.Html.Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
{
while (iterator.NextNode() != null)
{
// Поскольку мы используем собственный фильтр, текущий узел всегда будет экземпляром HTMLImageElement.
// Таким образом, нам не нужны дополнительные проверки здесь.
var image = (Aspose.Html.HTMLImageElement)iterator.CurrentNode;
System.Console.WriteLine(image.Src);
// вывод: image1.png
// вывод: image2.png
}
}
}
Веб-скрейпинг с использованием XPath Query в C#
XPath можно использовать для извлечения данных из HTML-документов. В следующем фрагменте кода показано, как использовать XPath Query для веб-скрейпинга в C#:
// Подготовить HTML-код
var code = @"
<div class='happy'>
<div>
<span>Hello!</span>
</div>
</div>
<p class='happy'>
<span>World</span>
</p>
";
// Инициализировать документ на основе подготовленного кода
using (var document = new Aspose.Html.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#
Вы можете создать шаблон поиска для сопоставления элементов в дереве документа на основе синтаксиса селекторов CSS. В приведенном ниже фрагменте кода объясняется, как выполнять парсинг веб-страниц с помощью CSS Selector в C#:
// Подготовить HTML-код
var code = @"
<div class='happy'>
<div>
<span>Hello</span>
</div>
</div>
<p class='happy'>
<span>World!</span>
</p>
";
// Инициализировать документ на основе подготовленного кода
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
// Здесь мы создаем селектор CSS, который извлекает все элементы, чей атрибут «класс» равен «счастливому», и их дочерние элементы SPAN.
var elements = document.QuerySelectorAll(".happy span");
// Перебрать полученный список элементов
foreach (Aspose.Html.HTMLElement element in elements)
{
System.Console.WriteLine(element.InnerHTML);
// вывод: привет
// вывод: Мир!
}
}
Получить бесплатную лицензию
Вы можете запросить бесплатную временную лицензию для полной оценки API.
Вывод
В этой статье вы узнали о библиотеке парсинга веб-страниц C#, Aspose.HTML для .NET, которая включает несколько методов для создания парсера веб-страниц на C#. В нем обсуждается HTML-навигация, XPath-запрос, а также метод селектора CSS для достижения ваших требований. Однако, если вам нужно обсудить какие-либо проблемы или вопросы, напишите нам на форум.