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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как юзать модуль HTML::Parser в Perl? 
:(
    Опции темы
Гость_s_a_s_h_a
Дата 5.8.2004, 20:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Люди, расскажите, пожалуйста, как использовать модуль HTML::Parser для анализа HTML-кода.

Я смотрел документацию на http://search.cpan.org , но с моим очень плохим знанием англицкого ничего не понял, и экзамплы - единственное мое спасение - тоже не понял.

Мне надо получить информацию об имеющихся в HTML-документе формах, а именно name and action формы, списки input'ов, их types, names and values, а также аналогичную инфоррмацию об select'ах, textarea и т.п.

Всем, принявшим участие в развитии этой темы, заранее говорю спасибо.
  Вверх
ElectricalStorm
Дата 6.8.2004, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



что нужно конкретно ?
Добавлено @ 08:41
вот тут снаяала посморите ... если не поможет то сюда ...

http://www.foo.be/docs/tpj/issues/vol5_1/tpj0501-0003.html


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
Гость_s_a_s_h_a
Дата 6.8.2004, 09:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Посмотрел. Не помогло. Конкретно мне нужно следующее.

У меня есть строка, содержащая код HTML-страницы. Надо получить информацию о каждой форме на этой странице, т.е.:

форма 1
name="name" action="url"

input type="type_1" name="name_1" value="value_1"
input type="type_2" name="name_2" value="value_2"
select name="name" option_1 option_2 ..........
textarea name="name"

форма 2
name action
...............

  Вверх
Secandr
Дата 6.8.2004, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



А самому руками разобрать при помощи регекспов?


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Гость_s_a_s_h_a
Дата 6.8.2004, 09:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











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

$p = HTML::Parser->new( api_version => 3,
start_h => [\&start, "tagname, attr"],
end_h => [\&end, "tagname"],
marked_sections => 1,
);


где не понятно, что можно подставить и куда и как потом это использовать).
  Вверх
ElectricalStorm
Дата 6.8.2004, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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





--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
Secandr
Дата 6.8.2004, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



Если нужно парсить какой-то один файл или сайт, который изменяться не будет, то логичнее написать регексп. Будет быстрее и надёжнее.

Если нужно парсить разные сайты, формат которых неизвстен, то лучше использовать готовый модуль.


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
ElectricalStorm
Дата 6.8.2004, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Надежнее не факт что будет (это обуславливается не строгостью формата HTML )
.... и тем более не факт что быстрее ... (тем что регекспы работающие быстро еще надо научиться писать )



--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
Гость_s_a_s_h_a
Дата 6.8.2004, 10:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Парсить нужно разные сайты, формат которых неизвестен.
Спасибо за ссылку. Правда я ее уже видел. У меня маленький стаж программирования и поэтому есть некоторые трудности. В данном случае возникли следующие вопросы:

package ParseForm;

use strict;
use vars qw(@ISA $inrecord $inform);

@ISA = qw(HTML::Parser);
require HTML::Parser;

Что должны содержать переменные $inrecord $inform. И что именно делает эта часть кода.

use HTML::Parser;
$p = HTML::Parser -> new();

Это мне понятно, а то что выше нет.

Я также не понял, где вызываются процедуры start() and end(), а также почему в одном скрипте встречается два раза строка #!/usr/bin/perl -w


  Вверх
ElectricalStorm
Дата 6.8.2004, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



я тоже посмотрел эту статью ....руки оторвать тому кто её писал...

посмотрите HTML::TokeParser он более простой ...



--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
Гость_s_a_s_h_a
Дата 6.8.2004, 11:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо за солидарность. Мало кто умеет доходчиво написать для ламеров и юзеров, а методом тыка иногда надоедает действовать.
  Вверх
ElectricalStorm
Дата 6.8.2004, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вот маленький примерчик набросал посмотрите
Код


#!/usr/bin/perl -w
     
use strict;
use HTML::TokeParser;

my $p = HTML::TokeParser->new(shift||"index.html");

while (my $token = $p->get_tag("form")) {
print $token->[0] ,"\n";
dumpHash( $token->[1] );
print "\n";

while (my $input_token = $p->get_tag("input")) {
 print $input_token->[0] , "\n";
 for (@$input_token) {
  if (ref eq "HASH" ) {
   dumpHash($_);
   print "\n";
  }
 }
}

#    my $text = $p->get_trimmed_text("/form");
#    print $text;

}

sub dumpHash  {
my $h = shift;
print $_." => ".$h->{$_},"\n" for (keys %{$h});
}




--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
Гость_s_a_s_h_a
Дата 6.8.2004, 12:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Посмотрел код. Ругается:

Can't call method "get_tag" on an undefined value at

while (my $token = $p->get_tag("form"))

а также на строки
while (my $token = $p->get_tag("a"))

while (my $token = $p->get_tag("title"))

и другие.

  Вверх
ElectricalStorm
Дата 6.8.2004, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а вы как вызывали ?
Добавлено @ 12:06
надо еще файл на вход


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
Гость_s_a_s_h_a
Дата 6.8.2004, 12:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











пример из мана:

use HTML::TokeParser;
$p = HTML::TokeParser->new($STR1);
if ($p->get_tag("title"))
{ my $title = $p->get_trimmed_text;
print "Title: $title\n";
}

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


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

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


 




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


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

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