Разбор HTML-страницы в родительский-дочерний объект C#

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

HTML-код: http://notepad.cc/share/CFRURbrk3r

для каждого типа комнаты есть список под комнат, поэтому я хочу сгруппировать их как Родитель - Дети в Список объектов. потом мы сможем получить доступ к каждому из этих детей.

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

var uricontent = File.ReadAllText("TestHtml/Bew.html"); 
var html = new HtmlDocument(); // with HTML Agility pack         
html.LoadHtml(uricontent);                      
var doc = html.DocumentNode;                      
var rooms = (from r in doc.QuerySelectorAll(".rates")                             
             from s in r.QuerySelectorAll(".rooms")                           
             from rd in r.QuerySelectorAll(".rate")                           
             select new 
             {                  
                Name = rd.QuerySelector(".rate-description").InnerText.CleanInnerText(), 
                Price = r.QuerySelector(".rate-price").InnerText.CleanInnerText(),
                RoomType = s.QuerySelector("tr td h2").InnerText.CleanInnerText()   
             }).ToArray();    

1 ответ

Решение

Обновить:

Лично я бы не использовал Array. Я бы использовал List, Реализация List должен позволять вам добавлять определенные узлы в определенные позиции и группировать соответственно.

Тогда вы могли бы просто:

  • Петля (foreach)
  • найти
  • Сортировать
  • Выбрать

Что позволит вам быстро фильтровать содержимое. Так как каждый элемент списка сохраняется. Несколько примеров.


Обновить:

Еще один элемент, который я забыл упомянуть, Html Agility Pack может выполнять следующие действия:

  • Захватить определенный узел / элемент.
  • Возьмите родительский и все последующие дочерние узлы / элементы.

Он также может захватывать удаленные или локальные страницы.


Я бы на самом деле скачал Html Agility Pack от Nuget. Это невероятно мощный и надежный инструмент, который, скорее всего, облегчит очистку нужных данных. Вы можете скачать его, выполнив следующие действия:

  • Перейти в Инструменты
  • Перейти к диспетчеру пакетов Nuget
  • Выберите Консоль диспетчера пакетов
  • Откройте консоль диспетчера пакетов в левом нижнем углу Visual Studio, если она не открылась.
  • Введите следующую команду Install-Package HtmlAgilityPack,

Отличный пример можно найти из этого вопроса.

Предпосылка проста:

HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();

// Map the document to the Html Page.
document.Load(filePath);

// If you would rather do it through Xml String, should you require it.

if (document.DocumentNode != null)
{
     HtmlAgilityPack.HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("//body");
     if( bodyNode != null)
     {
           // Do something with bodyNode.
     }
}

В этом примере показан синтаксис, но должно быть намного проще извлечь определенные узлы со страницы и соответственно манипулировать ими с помощью HtmlAgilityPack,

Надеюсь, это укажет вам лучшее направление.

Другие вопросы по тегам