Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2013, 15:14   #1
No_Comments
Пользователь
 
Регистрация: 03.07.2011
Сообщений: 92
По умолчанию Парсинг таблицы с помощью Html Agility Pack

Здравствуйте! Помогите, пожалуйста, грамотно распарсить страницу!

На странице имеется 2 вот такие таблицы:

Код HTML:
<table class="c-table schedule" width="100%" >
<tr><td class="time">08:30</td>
<td><div class="day-div">						
<div class="subject" title="Профессиональный русский язык">ПРЯ</div>
<div class="room">
<a href="/view.php?weekType=1&aslist=0&for=4-213%D0%90">4-213А</a>
</div>
<div class="lesson-type" title="Практическая работа">ПР</div>
<div class="group-teacher">						
<a href="/view.php?weekType=1&aslist=0&for=%D0%9A%D0%B0%D0%BB%D0%B8%D0%BD%D0%B8%D0%BD%D0%B0+%D0%95.%D0%92." title="Калинина Е.В. · старший преподаватель">Калинина Е.В.</a></div>
</div></td>
Я начала парсить, и столкнулась с тем, что у меня структура кода становится дико запутанной:
Код:
var DocTable = doc.DocumentNode.SelectNodes("//table[@class='c-table schedule']").ToList();
			HtmlNode DocTableOdd = DocTable[0];
			HtmlNode DocTableEven = DocTable[1];
			var OddLessons = DocTableOdd.SelectNodes("tr").ToList();
			var EvenLessons = DocTableEven.SelectNodes("tr").ToList();
			List<HtmlNode> OddCollection = new List<HtmlNode>();
Чем глубже я перемещаюсь по таблице, тем больше у меня List<> становится.

Подскажите, что мне делать?

П.С. Исходник страницы
No_Comments вне форума Ответить с цитированием
Старый 07.12.2013, 15:36   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а что вам надо то?
eval вне форума Ответить с цитированием
Старый 07.12.2013, 15:54   #3
No_Comments
Пользователь
 
Регистрация: 03.07.2011
Сообщений: 92
По умолчанию

Мне надо получить массив элементов, которые представляют собой набор данных из тэгов <div class="subject">, <div class="room"> <div class="lesson-type"> и <div class="group-teacher">.
Т.е. как бы два массива, т.к. у меня две таблицы.
No_Comments вне форума Ответить с цитированием
Старый 07.12.2013, 16:02   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

так у вас в каждой ячейке таблицы они есть, да еще по времени распределены, тут надо тупо ходить по ровам и забирать
eval вне форума Ответить с цитированием
Старый 07.12.2013, 16:05   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

можно просто поиском в таблице выбрать все дивы с class="day-div", а далее в них копаться
типа DocTableOdd.SelectNodes("div[@class='day-div']")
eval вне форума Ответить с цитированием
Старый 07.12.2013, 16:33   #6
No_Comments
Пользователь
 
Регистрация: 03.07.2011
Сообщений: 92
По умолчанию

Если брать все с классом div-day, они все в одну кучу соберутся и я их потом по дням и по времени не распихаю.
У меня так-то по 4-5 тэгов <tr> в одном <table> и 7 тэгов <td> в каждом <tr>...
Или не пытаться распарсить все в одной функции? Написать еще 2 на каждую неделю.
Мне просто все это потом в базу заносить...
No_Comments вне форума Ответить с цитированием
Старый 07.12.2013, 17:04   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

дивы соберутся по таблицам, через паренты выйдите на время и день
одна функция или несколько не столь важно, главное чтоб самой не запутаться
eval вне форума Ответить с цитированием
Старый 07.12.2013, 17:18   #8
No_Comments
Пользователь
 
Регистрация: 03.07.2011
Сообщений: 92
По умолчанию

Это вы правильно заметили - главное самой не запутаться)
У меня еще проблема была. Когда я обращалась к Node, где у меня тэг <tr> и все, что внутри, то метод SelectNodes("div[@class='div-day']").ToList возвращал список с нулевыми элементами...
No_Comments вне форума Ответить с цитированием
Старый 07.12.2013, 18:10   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

что такое "нулевыми элементами"?
eval вне форума Ответить с цитированием
Старый 07.12.2013, 18:21   #10
No_Comments
Пользователь
 
Регистрация: 03.07.2011
Сообщений: 92
По умолчанию

Ну вот делаю я

Код:
var Temp = DocTableOdd.SelectNodes("div[@class='day-div']");
И Temp в результате null
No_Comments вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по Html Agility Pack C# No_Comments Помощь студентам 4 01.12.2013 14:40
значения из html таблицы (парсинг) Smagulov85 Работа с сетью в Delphi 12 19.08.2013 14:59
парсинг Html djetx Общие вопросы Delphi 3 01.08.2011 18:56
Парсинг с помощью DOM akum Общие вопросы Delphi 5 25.08.2009 19:19
Связать 2 таблицы AdvStringGrid компанента TMS Component Pack Polotenchik Компоненты Delphi 3 27.06.2009 00:47