Разбор 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
,
Надеюсь, это укажет вам лучшее направление.