информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Страшный баг в WindowsАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Крупный взлом GoDaddy 
 Просроченный сертификат ломает... 
 Phrack #70/0x46 
главная обзор 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-2021 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach