2009-03-17 9 views
45

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

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

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

ответ

96

Как о чем-то вроде: Использование HTML 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 к объектам, если вы хотите:

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

Привет, пожалуйста, советник по разбору больших файлов? Более 50 мб файлов я не могу получить дочерние tr-узлы на больших файлах. –

+0

@Marc - если таблица подкачки, то как перейти на следующую страницу, очищая? –

+0

@Dark_Knight вам нужно будет ударить по любым маршрутам ajax на исходной странице –

31

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

+3

Имейте в виду, что иногда браузер слегка изменяет DOM html - например, добавляет в

, если он отсутствует. Html Agility Pack по умолчанию также не будет включать и