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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как найти конец таблицы </table>, парсинг html 
:(
    Опции темы
burakov
Дата 21.4.2011, 10:42 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день, 

подскажите как выдрать из html таблицу , если в ней есть куча вложенных таблиц,
то есть может есть какое то хитрое решение?

<table id=1>
      <table> </table>
       <table> 
              <table> </table>
        </table>
</table>


Начало таблицы я могу указать уникально,

а как найти мой верхний закрывающий </table>?


Только пожалуйста не посылайте изучать HTML::Element я уже сутки сижу всякие html::parser и ему подобное читаю - ничего непонятно.
Лучше, если кто делал, поделитесь кодом.
Спасибо.


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

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



а регулярки жадные. ищите /<\/table>/ и найдете самое крайнее совпадение
только если две таблицы будут - уже не подойдет


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
burakov
Дата 21.4.2011, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

Тут надо как то дерево построить от сих до сих, как то учитывая вложенные table. В принципе если повозюкаться то можно родить, но блин это мне два дня сидеть врубаться. Вот и подумал столько модулей разных готовых настрогали, а как их применить к моей ситуации ума не приложу.


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


Опытный
**


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

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



Код


my $tree = HTML::TreeBuilder::XPath->new;
$tree->parse_content($response->decoded_content());

my @matches = $tree->findnodes(q{//table[@id='1']});
my $table = shift @matches;



А если не хотите изучать то с чем работаете, то наверно стоит задуматься о смене работы.
PM MAIL   Вверх
burakov
Дата 21.4.2011, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Не получается что то

Код

use HTML::TreeBuilder::XPath;

my $tree = HTML::TreeBuilder::XPath->new ();
my $file = 'Board_Message.aspx_MsgID=6473169.htm';

$tree->parse_file($file);



#Вот такой вот такой вот pattern идет за <tablle ...>
my $pattern = 'cellpadding="0" cellspacing="0" border="0" width="100%" style="clear:both"'; 

# my @matches = $tree->findnodes(q{//table[@id='1']});

#пытаюсь как то аналогично его пристроить

my @matches = $tree->findnodes(q{//table[@cellpadding='0']});
my $table = shift @matches;


#но ничего не печатает
print $table."\n";


Чего не так делаю?




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


Опытный
**


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

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



Покажите с какой страницы эта таблица, у меня ведь нет вашего исходника
PM MAIL   Вверх
burakov
Дата 21.4.2011, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я вот в архиве файл со страницей приложил
та таблица ,где есть 
<span class="h9">характеристики:</span>

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  1.zip 13,84 Kb


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


Опытный
**


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

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



Да, случай запущенный... 

Во первых, вот:
my @matches = $tree->findnodes(q{.//*[@id='aspnetForm']/div[7]/div[2]/table[1]/tr/td[1]/table/tr/td[1]/table});

Во вторых:
http://www.w3schools.com/xpath/
http://search.cpan.org/~mirod/HTML-TreeBui...uilder/XPath.pm
http://search.cpan.org/~jfearn/HTML-Tree-4...HTML/Element.pm
https://addons.mozilla.org/en-us/firefox/addon/firepath/

Если после прочтения останутся вопросы, то обращайтесь - сделаю недорого.

PM MAIL   Вверх
burakov
Дата 21.4.2011, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо, infarch

Буду читать - еще бы по-русски писали эту документацию вообще бы хорошо было бы.
конечно я ничего не понял в
my @matches = $tree->findnodes(q{.//*[@id='aspnetForm']/div[7]/div[2]/table[1]/tr/td[1]/table/tr/td[1]/table});

мне как всегда улыбнулась удача - и я разобрал эти вложенные таблицы при помощи регулярки - хотя понимаю, что это конечно же не то.
Кстати, а Ваш код подразумевает, что вложенность таблиц может произвольно меняться и т.л. - просто я вижу цифры, которые как бы говорят мне о количестве вложенных блоков, то есть как бы разобран один частный случай конкретной страницы... или я ошибаюсь???

Еще раз огромное спасибо.


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


Опытный
**


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

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



Цифры, они такие... О чем только не говорят.

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


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

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


 




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


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

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