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

Поиск:

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


Бывалый
*


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

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



см.
perldoc HTML::Parser

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


Unregistered











Нашел bug - если передаем строку для парсинга то надо поставить перед перед переменной \

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

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


Опытный
**


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

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



мой пример заработал у Вас ?


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


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Програ которую написал ElectricalStorm прекрасно работает только при вызове необходимо передать имя нужного html файла или в текущем каталоге должен быть файл с именем index.thml.

Вызывай примерно так:
C:\>perl myparser.pl home.html
Удачи.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Гость_s_a_s_h_a
Дата 6.8.2004, 16:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(ElectricalStorm @ 6.8.2004, 14:01)
мой пример заработал у Вас ?

ElectricalStorm, не совсем. Если в документе больше одной формы, то он [скрипт] выдает, информацию о всех инпутах, но только об одном теге <form> - первом. Сейчас работаю над этой траблой. А ведь еще надо собрать инфу об опшинах тега <select>. Но главное начать. Спасибо, с вашей помощью у меня это получилось.

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


Опытный
**


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

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



вообщем то понятно почему она так делает ...
вложеным вайлом доходит до конца файла .... начиная с первого тега form


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


Unregistered











Это и мне понятно. Я уже немного модифицировал этот алгоритм. Теперь надо то что получилось в кучу собрать.

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

use HTML::TokeParser;
$p = HTML::TokeParser->new(\$STR1);

my @tags= ("form","input","select","/select","texterea","/textarea","/form");

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

}
}

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


Опытный
**


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

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



видите как легко получилось ....
а дальшле уже можно хоть чего с ним делать .... остальное можно без помощи модуля...

Код

use HTML::TokeParser;

my $p = HTML::TokeParser->new(shift || "index.html");
my @tags= ("form","input","select","/select","texterea","/textarea","/form");

while (my $input_token = $p->get_tag(@tags)) {
print $input_token->[3] , "\n";
}


Это сообщение отредактировал(а) ElectricalStorm - 6.8.2004, 17:13


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


Unregistered











Проблемы продолжаются. Теперь столкнулся со следующим недоразумением. Мне надо получить значение опшинов внутри тега <select>, используя функции get_text или get_trimmed_text, я их получаю, но они никак не разделены. Как это обойти. Вот кусок скрипта.

use HTML::TokeParser;
$p = HTML::TokeParser->new(\$STR1);

my @tags=("form","input","select","/select","texterea","/textarea","/form");

while (my $input_token = $p->get_tag(@tags))
{
if($input_token->[0] eq 'select')
{
$str = $p->get_trimmed_text("/select"); #получили строку с значениями опшинов никак не разделенными.

}
}

аналогичный результат, если $str = $p->get_text("/select");

и совсем пусто если $str = $p->get_trimmed_text; или $str = $p->get_text;

Если кто-то что-то понял, помогите, пожалуйста.
  Вверх
Гость_s_a_s_h_a
Дата 8.8.2004, 14:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Меня осенило и я сделал это сам.

my @tags=("form","input","select","option","/select","texterea","/textarea","/form");

my $str2="";

while (my $input_token = $p->get_tag(@tags))
{
if($input_token->[0] eq 'select')
{ $str2="";}
if($input_token->[0] eq 'option')
{ my $str1 = $p->get_text;
$str2=$str2.":::".$str1;

}
}

  Вверх
aleksnn
Дата 2.5.2005, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Из google часто попадал сюда - учась парсить.
Теперь знаю как и скажу другим smile .
Делается так:

use HTML::Parser;
$parser = HTML::Parser->new(api_version => 3);
$parser ->handler(default => \&link_ext, 'tagname,text');
$parser->parse($html); # $html ваш файл

sub link_ext{
my ($tag, $text) = @_;
return if $tag eq "";
print "$tag => $text \n";
}

см perldoc HTML::Parser для просвещения.
PM MAIL   Вверх
player943
Дата 22.11.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Граждане, раз уж есть такая тема то помогите с программой.
Сразу: rtfm читал.
Суть: надо используя HTML::TokeParser рассчитать частоту слов 
и фраз из двух-трех слов, исключая предлоги и знаки припинания, 
а также HTML теги и код JavaScript.

Вопрос: нужно перебирать все возможные тэги html или как просче ? 
PM MAIL WWW ICQ   Вверх
Zukoff
Дата 4.7.2007, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Саша, ті решил заспамить гостевые книги? smile
лучше купи спамилку за 50 баксов
PM MAIL   Вверх
nitr
Дата 4.7.2007, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ребят... тема 2006 года... давайте не флудить... и тем более оффтопить...



--------------------
PM   Вверх
aleksnn
Дата 5.7.2007, 04:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Zukoff @ 4.7.2007,  14:48)
Саша, ті решил заспамить гостевые книги? smile
лучше купи спамилку за 50 баксов


Это вопрос ко мне? smile если что, то я не автор темы.

Сейчас скажу, что я тогда делал.

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

Частично я сего монстра написал и раза  три использовал smile.


И чтобы сильно не офтопить отвечу на вопрос player943 как просче

Я когда-то подсчитывал количество полезных символов на странице примерно так

Открыл исходный текст нашёл там теги начала и конца полезного текста

Для этой страницы это
Код

<div class="postcolor">

</div>


сохранил страницу как index.htm.

запускаю такой код

Код

#!/usr/bin/perl -w

use strict;

my $Html;
my $file = 'c:\index.htm';
my $TagBegin ='<div class="postcolor">';
my $TagEnd ='</div';

open File,$file;
undef $/;
$Html=<File>;
while ($Html=~/$TagBegin(.*?)$TagEnd/g)
{
    my $a=$1;
    $a =~s/(<.*?>)|(&.*?;)//g; #режу мусорные теги, такие как br и спецсимволы
    print "$a\n\n";
}


который выдаёт мне десять строк полезных слов smile



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.0785 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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