Пакет гибкости HTML - таблицы разбора

c# html html-agility-pack html-parsing

Вопрос

Я хочу использовать пакет гибкости HTML для анализа таблиц с сложных веб-страниц, но я как-то теряюсь в объектной модели.

Я посмотрел на пример ссылки, но так и не нашел никаких табличных данных. Могу ли я использовать XPath для получения таблиц? В основном я потерял после загрузки данных о том, как получить таблицы. Я делал это в Perl раньше, и это было немного неуклюже, но работало. ( HTML::TableParser ).

Я также счастлив, если можно просто пролить свет на правильный порядок объектов для синтаксического анализа.

Принятый ответ

Как насчет чего-то типа: Использование пакета Agility Pack

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);
}

Популярные ответы

Самое простое, что я нашел, чтобы получить XPath для конкретного элемента - установить FireBug-расширение для Firefox, перейдите на сайт / веб-страницу, нажмите F12, чтобы открыть firebug; щелкните правой кнопкой мыши элемент на странице, которую вы хотите запросить, и выберите «Inspect Element». Firebug выберет элемент в своей среде IDE, затем щелкните правой кнопкой мыши элемент «Элемент в Firebug» и выберите «Copy XPath», эта функция даст вам точный XPath Вы должны получить желаемый элемент с помощью библиотеки HTML Agility.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow