Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> парсинг сложных таблиц 
:(
    Опции темы
burakov
Дата 7.6.2012, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Здравствуйте, 
поставили задачу распарсить в отдельные поля 
расписание 
http://www.fitnes.ru/content/ru/schedule.html?cl=8299

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

после простейшего распарсивания
получилось

Код

<td class="w100">11:00</td>
<td class="dark sched_cmn_0">&nbsp;</td>
<td class="light sched_cmn_0">&nbsp;</td>
<td class="dark sched_cmn_0">&nbsp;</td>
<td class="light sched_cmn_3016">Yoga 1.5ч</td>
<td class="dark sched_cmn_0">&nbsp;</td>
<td class="light sched_cmn_4110">Step 1 </td>
<td class="dark td_last sched_cmn_0" rowspan="2">&nbsp;</td>


<td class="w100">12:00</td>
<td class="dark sched_cmn_4111">Interval </td>
<td class="light sched_cmn_4109">Здоровая спина </td>
<td class="dark sched_cmn_4110">Step 1 </td>
<td class="light sched_cmn_4117">Latina 12:30</td>
<td class="dark sched_cmn_4105">Tae-bo </td>
<td class="light sched_cmn_4101">Super strong </td>


<td class="w100">13:00</td>
<td class="dark sched_cmn_4555">abs+stretch </td>
<td class="light sched_cmn_4099">Fitball </td>
<td class="dark sched_cmn_4101">Super strong </td>
<td class="light sched_cmn_3018">Dance mix 13:30</td>
<td class="dark sched_cmn_4113">Lower body </td>
<td class="light sched_cmn_7973"> Самбо $</td>
<td class="dark td_last sched_cmn_3010">Бокс </td>


<td class="w100">14:00</td>
<td class="dark sched_cmn_0" rowspan="4">&nbsp;</td>
<td class="light sched_cmn_0" rowspan="4">&nbsp;</td>
<td class="dark sched_cmn_0" rowspan="4">&nbsp;</td>
<td class="light sched_cmn_0" rowspan="4">&nbsp;</td>
<td class="dark sched_cmn_0" rowspan="4">&nbsp;</td>
<td class="light sched_cmn_0" rowspan="8">&nbsp;</td>
<td class="dark td_last sched_cmn_4109">Здоровая спина </td>


<td class="w100">15:00</td>
<td class="dark td_last sched_cmn_4113">Lower body </td>


<td class="w100">16:00</td>
<td class="dark td_last sched_cmn_3016">Yoga </td>


<td class="w100">17:00</td>
<td class="dark td_last sched_cmn_3019">BellyDance </td>


<td class="w100">18:00</td>
<td class="dark sched_cmn_4102">Basic class </td>
<td class="light sched_cmn_4117">Latina </td>
<td class="dark sched_cmn_4101">Super strong </td>
<td class="light sched_cmn_3017">Stretch </td>
<td class="dark sched_cmn_4099">Fitball </td>
<td class="dark td_last sched_cmn_7973"> Kettle Bell $</td>


<td class="w100">19:00</td>
<td class="dark sched_cmn_4114">Upper body </td>
<td class="light sched_cmn_7973"> DanceStretch /Step 1</td>
<td class="dark sched_cmn_3014">Pilates </td>
<td class="light sched_cmn_4107">Strip dance </td>
<td class="dark sched_cmn_4110">Step 1 </td>
<td class="dark td_last sched_cmn_0" rowspan="3">&nbsp;</td>


<td class="w100">20:00</td>
<td class="dark sched_cmn_4111">Interval /Самбо</td>
<td class="light sched_cmn_4113">Lower body Жен. бокс</td>
<td class="dark sched_cmn_4099">Fitball BellyDance</td>
<td class="light sched_cmn_4111">Interval /Самбо</td>
<td class="dark sched_cmn_4101">Super strong </td>


<td class="w100">21:00</td>
<td class="dark sched_cmn_7287">Capoeira Abs+Stretch</td>
<td class="light sched_cmn_3016">Yoga 1.5ч /Бокс</td>
<td class="dark sched_cmn_3017">Stretch </td>
<td class="light sched_cmn_3014">Pilates /Capoeira</td>
<td class="dark sched_cmn_4109">Здоровая спина Бокс</td>



из чего видно, что построчно такую таблицу не возьмешь
поскольку непонятно (там где меньшее количество столбцов) какой ячейке таблицы принадлежит контент.


понимаю что хочу ЧУДА, но для моей логики  данный парсинг весьма сложен оказался
может есть какой то модуль?
который бы преобразовывал данную таблицу 
в таблицу состоящую из одиночных ячеек (без rowspan="").

или может кто уже делал и поделится кусочком кода.?

спасибо.






--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
EcSYZ
Дата 8.6.2012, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 21.6.2007

Репутация: нет
Всего: 1



Как на счёт варианта - превратить rowspan в несколько записей ?
Что-то вроде:
Код

my @new_data;
foreach my $str(@html_data){
    #my $str
    if($str =~ /rowspan=\"(\d+)\"/){
        $str = q{<td class="dark sched_cmn_4111"></td>}x$1;
    }
    push @new_data, $str;
}


Это сообщение отредактировал(а) EcSYZ - 8.6.2012, 00:22
PM MAIL WWW   Вверх
burakov
Дата 8.6.2012, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



спасибо.

об этом решении я подумал конечно, но это было бы легко, если бы в каждой строке было свое объединение столбцов.
ниже кусочек, где видно, что в верхней строке есть объединение, а внизу оставлен просто 1 столбец.
то есть нужно как то еще анализировать предыдущее состояние...

кроме того кусочек показывает как криво выполненно само объединение (хотя отображается "глазами" все верно). (я имею ввиду, что столбцов в таблице всего 8, а роуспанов хрен поймешь на каждой ячейке понатыкано.) -- вообщем криво до безобразия.
прямо руки опускаются. smile.

Код

<td class="w100">14:00</td>
<td class="dark sched_cmn_0" rowspan="4">&nbsp;</td>
<td class="light sched_cmn_0" rowspan="4">&nbsp;</td>
<td class="dark sched_cmn_0" rowspan="4">&nbsp;</td>
<td class="light sched_cmn_0" rowspan="4">&nbsp;</td>
<td class="dark sched_cmn_0" rowspan="4">&nbsp;</td>
<td class="light sched_cmn_0" rowspan="8">&nbsp;</td>
<td class="dark td_last sched_cmn_4109">Здоровая спина </td>

<td class="w100">15:00</td>
<td class="dark td_last sched_cmn_4113">Lower body </td>



--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
White_Eagle
Дата 8.6.2012, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 28.3.2007

Репутация: нет
Всего: нет



Как я вижу из предоставленного html -  значения есть только там где  td class="ляляляляля_4109" - последние 4 цифры. А там где в конце "0" - их нет. 
Начинать с
Код

if ($_=~/<td class="w100">(.?)</td>/)
            {
                my $time=$1;

 
а дальше проверять "0" в конце класса - пропускать или 4 цифры - записывать.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0816 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.