Как мне получить доступ к tr этой таблицы, используя HtmlAgilityPack? - PullRequest
0 голосов
/ 27 мая 2018

Так что в настоящее время я играю с HtmlAgiltiyPack, пытаясь понять, как проходит через XML-документ, такой как HTML-документ, чтобы увидеть, как работает и как он течет.

Выбранный мной веб-сайт был https://www.kijiji.ca

То, что я пытаюсь сделать, это захватить заголовок списков Featured, но я наткнулся на проблему.

Мне удалось найти все таблицы Featured, но теперь яЯ хотел бы погрузиться в текущий, в котором я нахожусь, и найти его tr, который содержит класс description.

Это то, что я имею до сих пор.

private static string URL = "https://www.kijiji.ca/b-renovation-contracting-handyman/ontario/home-renovations/k0c753l9004";
        private static HtmlWeb client = new HtmlWeb();
        static void Main(string[] args)
        {
            var DOM = client.Load(URL);
            var Featured = DOM.DocumentNode.SelectNodes("//table[contains(@class,'top-feature')]");
            foreach (var Listing in Featured)
            {

            }
        }

ЕстьНесколько вещей, которые меня интересуют, например, одна вещь, о которой я спрашивал выше, как нырнуть глубже , а также ..

Что у меня там есть.что на самом деле содержит Listing, содержит ли оно все дочерние узлы?Я полагаю, что в этом случае tbody будет смотреть на это для справки.Visual reference

Или он будет содержать все дочерние узлы, не только tbody, но также tr & td?

1 Ответ

0 голосов
/ 27 мая 2018

Как насчет этого примера:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(@"<html><body><p><table id=""foo""><tr><th>hello</th></tr><tr><td>world</td></tr></table></body></html>");
foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table")) {
Console.WriteLine("Found: " + table.Id);
foreach (HtmlNode row in table.SelectNodes("tr")) {
    Console.WriteLine("row");
    foreach (HtmlNode cell in row.SelectNodes("th|td")) {
        Console.WriteLine("cell: " + cell.InnerText);
    }
}
}

Обратите внимание, что вы можете сделать его красивее с LINQ-to-Objects, если хотите:

var query = from table in doc.DocumentNode.SelectNodes("//table").Cast<HtmlNode>()
        from row in table.SelectNodes("tr").Cast<HtmlNode>()
        from cell in row.SelectNodes("th|td").Cast<HtmlNode>()
        select new {Table = table.Id, CellText = cell.InnerText};

foreach(var cell in query) {
Console.WriteLine("{0}: {1}", cell.Table, cell.CellText);
}
...