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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему HTML не парсится ? HTML::Parser 
:(
    Опции темы
stan777
Дата 13.2.2007, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

script1.cgi?var1= &var2= &var3=

script2.cgi?var11= &var22= &var33=
не знаю что лучше использовать мнгомерные массивы или простой какойнибуди обработчик ??


Это сообщение отредактировал(а) stan777 - 13.2.2007, 13:36
PM MAIL   Вверх
stan777
Дата 13.2.2007, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо вроде так работает 
Код

my @a=([my @f],
       [my @g],
       [my @h]);

$a[1][1]=100;

print $a[1][1];

PM MAIL   Вверх
amg
Дата 13.2.2007, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

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



stan777, совет: при работе со всякими структурами данных (в частности, с многомерными массивами), чтобы посмотреть, как выглядит твоя структура, очень удобно пользоваться модулем Data::Dupm (ну или стандартным Data::Dupmer)
Например, 
Код

use Data::Dump('dump');
@a=(["a","b","c"],["d","e"],["f"]);
dump @a;
$a[1][1]="ASD"; 
dump @a;

Код

(["a", "b", "c"], ["d", "e"], ["f"])
(["a", "b", "c"], ["d", "ASD"], ["f"])

PM MAIL   Вверх
stan777
Дата 13.2.2007, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(amg @ 13.2.2007,  13:23)
stan777, совет: при работе со всякими структурами данных (в частности, с многомерными массивами), чтобы посмотреть, как выглядит твоя структура, очень удобно пользоваться модулем Data::Dupm (ну или стандартным Data::Dupmer)
Например, 
Код

use Data::Dump('dump');
@a=(["a","b","c"],["d","e"],["f"]);
dump @a;
$a[1][1]="ASD"; 
dump @a;

Код

(["a", "b", "c"], ["d", "e"], ["f"])
(["a", "b", "c"], ["d", "ASD"], ["f"])

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

script1.cgi?var1= &var2= &var3=

script2.cgi?var11= &var22= &var33=
не знаю что лучше использовать мнгомерные массивы или простой какой нибудь другой способ??
я имею вот такой код 

Код

my $str =getform($url);
my  @array= split(" ", $str);
chomp(@array);
my $patf1="<form";
my $patf2="</form";
my $hitr1="<!--";
my $hitr2="-->";

my @new_array;
    my $fflag=0;

       foreach my $i (@array){

    if($i =~/\Q$hitr1/){$fflag--;}
    if($i =~/\Q$hitr2/){$fflag++;}

    if ($i=~/\Q$patf1/i){$fflag=1;}

        if($fflag>0){push @new_array, $i;}

    if($i=~ /\Q$patf2/i){$fflag=0;}
        
    }

всё что лежит между <form  </form> я отправляю в массив @new_array только в документе много таких кусков, и мне нужно допустим каждый кусок записывать в отдельный массив, как это сделать ? 

Это сообщение отредактировал(а) stan777 - 13.2.2007, 13:46
PM MAIL   Вверх
Shaggie
Дата 13.2.2007, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

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



stan777, перестань менять первый пост, это 1) против правил форума, могут забанить, 2) просто по-человечески неудобно читать, да и с темой не совпадает.

Одна тема - один вопрос!

И давай более развернутый вопрос, из последнего я например совершенно ничего не понял. Формы? Или ссылки? И при чем тут многомерные массивы?


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
stan777
Дата 13.2.2007, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



мля я сам уже не понял, запутался блин  smile 
PM MAIL   Вверх
Shaggie
Дата 13.2.2007, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

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



Цитата(stan777 @  13.2.2007,  13:38 Найти цитируемый пост)
всё что лежит между <form  </form> я отправляю в массив @new_array

А теперь обрабатывай что получил! Параметры передаются в тегах <input>, их имена - в параметре "name". Регулярку сам напишешь?


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
stan777
Дата 13.2.2007, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



конечно попробую сам, если впросы еще будут спрошу ок smile
PM MAIL   Вверх
stan777
Дата 13.2.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



вот у меня такой код для пробега внутри поля <input ...............  >

Код

my $iflag=0;

    foreach my $ne (@form_array){# так я получаю все внутри тега input
                    if ($ne=~/\Q$intp1/i){$iflag=1;}  # вот тут ошибка 1 !
        if($iflag>0){push @input_array, $ne;}
        if($ne=~ /\>/){$iflag=0; # вот тут ошибка 2 !
                foreach my $ie (@input_array){
                        print $ie."\n";
                            }
                            @input_array=();
                        }

Теперь код такой, но это несколько не то что яхотел мне нужно чтобы он  внутри поля <input ...............  >

Код

my $iflag=0;

        foreach my $ne (@form_array){
        
                print $ne."\n" if $ne=~/\Q$patf1/ || $ne=~/\Q$patf2)/;

                                if ($ne=~/\Q$intp1/i){$iflag=1;
                            $ne=$';
                                }

                if($iflag>0){push @input_array, $ne;}

                if($ne=~ /\>$/){$iflag=0;
                    
                            foreach my $ie (@input_array){
                                print $ie."\n";
                        # if $ie =~/name\=\"/;
                            }
                            @input_array=();
                        }

                
        }
        @form_array=();


как сказать сказать чтобы скрипт брал в переменную только что стоит после /\Q$intp1/ и все что стоит перед /\>/ ?

Добавлено @ 16:03 

Это сообщение отредактировал(а) stan777 - 13.2.2007, 16:11
PM MAIL   Вверх
Shaggie
Дата 13.2.2007, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

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



stan777, сначала скажи прямо, что ты хочешь получить.

Я так понимаю, тебя интересуют имена всех переменных, которые могут посылаться из форм. При попытке проанализировать встретились закоментированные участки кода. Теперь все силы уходят на то, чтобы отделить комментарии от выполняемого текста программы... Правильно?

Это сообщение отредактировал(а) Shaggie - 13.2.2007, 17:18


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
stan777
Дата 13.2.2007, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



да правильно, мне тут сказали писать эту ерунду через  $p = HTML::TokeParser
что я конечно получаю с помощью нее но не точто нужно.

    
Код

    my $cpanurl = 'http://search.cpan.org/recent';
   my $rawHTML = get($cpanurl); # attempt to d/l the page to mem
   
   die "LWP::Simple messed up $!" unless ($rawHTML);
                                # Habit.  if it's empty, TokeParser would notice
   
   my $p = HTML::TokeParser->new(\$rawHTML) || die "Can't open: $!";
   
   while (my $token = $p->get_token)
   {
       my $ttype = shift @{ $token };
   
       if($ttype eq "S")    # start tag?
       {
           my($tag, $attr, $attrseq, $rawtxt) = @{ $token };
   
           if($tag eq "form")
           {
               my $form_action = $attr->{'action'};
               print $form_action."\n";
           }
    }
    }
 
экшен получаю уже хорошо, а мне нужно получить еще и name в <input name="asd" >
не пойму как внутри каждого <form> .... </form> идти по импутам как заставить smile ?
есть спецы по TokeParser вот я слышал что Нитр про это говорил может знает smile?
Просто этот пример не прасит <input> внутри <form> .... </form> почему не знаю.

я вставляю внутрь 
Код

if($tag eq "form")
           {
               my $form_action = $attr->{'action'};
               print $form_action."\n";
               
              if($tag eq "input"){
                               my $name_action = $attr->{'name'};
                               print $name_action."\n";
                   } 
           } 
так вот не работает ! мож кто знает как заставить работать внутри  <form> .... </form>  ?

Это сообщение отредактировал(а) stan777 - 13.2.2007, 19:33
PM MAIL   Вверх
stan777
Дата 14.2.2007, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо для разбора полетов очень удобно пользоватся 
Код

#print $_."\n" foreach(@{ $token });

PM MAIL   Вверх
Nab
Дата 14.2.2007, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а удобней

print join "\n", @$token; 

smile

или в одну строку

print "@{$token}";


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
stan777
Дата 14.2.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Nab @ 14.2.2007,  01:04)
а удобней

print join "\n", @$token; 

smile

или в одну строку

print "@{$token}";

Да новерное меньше байтов приводится вводить smile.

А как быть с тем что у тегов <input> нет закрывающегося тега, поэтому он не имеет флага "E" в HTML : : TokeParser, как быть с ним ?
стати с помощью этого print join "\n", @$token;  я узнал что  <input> имеет "S" соответсвенно smile

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


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

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


 




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


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

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