AngleSharp Использование QuerySelectorAll
Элемент со следующим XPath: /html/body/div[1]/div[4]/div[3]/div[3]/div[4]/div[1]; содержит в себе множество дочерних элементов div, в каждом из которых по относительному пути располагается элемент div/div[2]/div[2]/a, который содержит интересующую меня информацию. Каким образом мне получить все такие элементы с использованием библиотеки AngleSharp? То есть "XPath" получается в таком духе: /html/body/div[1]/div[4]/div[3]/div[3]/div[4]/div[1]/div[*]/div/div[2]/div[2]/a, где * - число от 2 до N.
Отдельно хочу спросить как поступить в ситуации, когда путь до элемента немного меняется. Возможно есть более надёжный способ, нежели XPath.
Ответы (1 шт):
Возьмём пример из документации и распарсим одну из страниц Википедии.
var config = Configuration.Default.WithDefaultLoader();
var address = "https://en.wikipedia.org/wiki/List_of_The_Big_Bang_Theory_episodes";
var context = BrowsingContext.New(config);
var document = await context.OpenAsync(address);
var tableSelector = "table";
var tdSelector = "td.summary";
var tables = document.QuerySelectorAll(tableSelector);
for (int i = 2; i < 5; i++)
{
var title = tables[i].QuerySelector(tdSelector);
Console.WriteLine(title.TextContent);
}
tableSelector - это ваш /html/body/div[1]/div[4]/div[3]/div[3]/div[4]/div[1]/div. У вас это будет divSelector.
tdSelector - это ваш /div/div[2]/div[2]/a. У вас это будет linkSelector.
Получаем первым запросом часть данных в коллекцию. И проходим циклом по нужным индексам от 2 до N. Получаем вторым запросом конкретные данные. У меня это название первой серии в каждом сезоне. У вас это будет элемент a.