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 шт):

Автор решения: Alexander Petrov

Возьмём пример из документации и распарсим одну из страниц Википедии.

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.

→ Ссылка