информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsСетевые кракеры и правда о деле ЛевинаАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Perl] Парсинг WEB страниц и кодировки 29.06.06 17:33  
Автор: TLoD,Snake Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Есть задача написания умного вэб спайдера/харвестера. Для этого использую сначала LWP, котрым сохраняю страницу в кэш на диске примерно так:

':content_cb' => sub{
my ($chunk, $res, $proto) = @_;
{
use bytes;
$total_received += length($chunk);
}
die() if $total_received/1024/1024 > $param{parse_file_max_size};
print W $chunk;
},
После чего натравливаю на него HTML::Parser. $p->parse_file()

Как корректно разрулить вопрос с кодировками? То есть будет ли HTML::Parser корректно разбирать файлы, не зная что там внутрях? В основном, конечно вопрос касаемо юникода.
Если пытаться энкодить все получаемое в UTF8, то насколько я понимаю, может получиться, что отправляя последующие запросы я буду давать параметры запроса в неверной кодировке и ничего не получать обратно.. То есть неюникодные ресурсы могут на меня за такое обидеться.
Как сделать универсально?
все хранить в уникоде, запросы делать в той кодировке,... 29.06.06 18:49  
Автор: arto Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Есть задача написания умного вэб спайдера/харвестера. Для
> этого использую сначала LWP, котрым сохраняю страницу в кэш
> на диске примерно так:
>
> ':content_cb' => sub{
> my ($chunk, $res, $proto) = @_;
> {
> use bytes;
> $total_received += length($chunk);
> }
> die() if $total_received/1024/1024 >
> $param{parse_file_max_size};
> print W $chunk;
> },
> После чего натравливаю на него HTML::Parser.
> $p->parse_file()
>
> Как корректно разрулить вопрос с кодировками? То есть будет
> ли HTML::Parser корректно разбирать файлы, не зная что там
> внутрях? В основном, конечно вопрос касаемо юникода.
> Если пытаться энкодить все получаемое в UTF8, то насколько
> я понимаю, может получиться, что отправляя последующие
> запросы я буду давать параметры запроса в неверной
> кодировке и ничего не получать обратно.. То есть
> неюникодные ресурсы могут на меня за такое обидеться.
> Как сделать универсально?

все хранить в уникоде, запросы делать в той кодировке, какую просят.
[Perl] все хранить в уникоде, запросы делать в той кодировке,... 29.06.06 20:51  
Автор: TLoD,Snake Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > Как корректно разрулить вопрос с кодировками? То есть
> будет
> > ли HTML::Parser корректно разбирать файлы, не зная что
> там
> > внутрях? В основном, конечно вопрос касаемо юникода.
> > Если пытаться энкодить все получаемое в UTF8, то
> насколько
> > я понимаю, может получиться, что отправляя последующие
> > запросы я буду давать параметры запроса в неверной
> > кодировке и ничего не получать обратно.. То есть
> > неюникодные ресурсы могут на меня за такое обидеться.
> > Как сделать универсально?
>
> все хранить в уникоде, запросы делать в той кодировке,
> какую просят.

Тогда соответственно два вопроса, как и чем переводить то, что получено в юникод (UTF8?)? Надеяться, что чарсет будет в хедерах?
И, соответственно, как потом переводить юникод обратно? Это получается надо где-то хранить метку в каком чарсете делать последующие запросы с этой страницы?

Опять же, получается, надо будет отдавать HTML::Parser-у юникодный файл. Если он хавает юникодный фал нормально, то получается он настолько же нормально отдаст мне все данные, которые будут тоже в юникоде и я их совершенно прозрачно запихиваю их в параметры запроса в LWP.

Схема работы должна быть примерно такова:
LWP -> File -> HTTP::Parser -> (Storable) -> LWP
можете попробовать статистикой определить его. 29.06.06 23:34  
Автор: arto Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > > Как корректно разрулить вопрос с кодировками? То
> есть
> > будет
> > > ли HTML::Parser корректно разбирать файлы, не
> зная что
> > там
> > > внутрях? В основном, конечно вопрос касаемо
> юникода.
> > > Если пытаться энкодить все получаемое в UTF8, то
> > насколько
> > > я понимаю, может получиться, что отправляя
> последующие
> > > запросы я буду давать параметры запроса в
> неверной
> > > кодировке и ничего не получать обратно.. То есть
> > > неюникодные ресурсы могут на меня за такое
> обидеться.
> > > Как сделать универсально?
> >
> > все хранить в уникоде, запросы делать в той
> кодировке,
> > какую просят.
>
> Тогда соответственно два вопроса, как и чем переводить то,
> что получено в юникод (UTF8?)? Надеяться, что чарсет будет
> в хедерах?

можете попробовать статистикой определить его.
переводить -- perldoc Encode.

> И, соответственно, как потом переводить юникод обратно?

perldoc Encode

> Это
> получается надо где-то хранить метку в каком чарсете делать
> последующие запросы с этой страницы?

да. метаинформация должна быть, как и url.

>
> Опять же, получается, надо будет отдавать HTML::Parser-у
> юникодный файл. Если он хавает юникодный фал нормально, то
> получается он настолько же нормально отдаст мне все данные,
> которые будут тоже в юникоде и я их совершенно прозрачно
> запихиваю их в параметры запроса в LWP.

да.

> Схема работы должна быть примерно такова:
> LWP -> File -> HTTP::Parser -> (Storable) ->
> LWP

вам ведь все равно надо информацию приводить к какому либо одному виду.
можете использовать cp1251.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach