2016-12-10 3 views
0

Я использую LWP :: UserAgent для очистки некоторых страниц. Чтобы сохранить пропускную способность, я не хочу загружать изображения и другие материалы на странице, меня интересует только текст.Не загружайте изображения при очистке

Не могу найти что-либо в документации, которая может помочь мне в этом. Пожалуйста, помогите

+0

Я использовал 'LWP :: UserAgent' все время, и он никогда не загружает изображения, только текст. Он также не загружает контент AJAX. – shawnhcorey

ответ

4

В то время как вы не показываете код, я предполагаю, что вы следуете в своих выскабливаниях только с ссылками <a href=, но не с <img src= или аналогичными ссылками (например, видео, css, favicon ..), которые, очевидно, являются изображениями и прочими типами данных, которые вас не интересуют.

К сожалению, с ссылкой <a href= невозможно определить, какие данные будут такими. Вы можете сделать некоторые предположения, основываясь на типичном суффиксе ресурса (т. Е. image.png), но вы не можете быть уверены, что это на самом деле. Эта информация вы получаете только после доступа к ресурсу, например, путем проверки Content-type, объявленного в заголовке ответа. LWP предлагает способ проверки заголовка ответа перед загрузкой полного ресурса, добавив обработчик для фазы response_header. От the documentation:

response_header => sub {my ($ response, $ ua, $ h) = @_; ...}
Этот обработчик называется сразу после получения заголовков ответа, но перед любыми данными контента. Обработчик может настроить обработчики для данных, и может сжать, чтобы прервать запрос.

Это может быть использован, чтобы остановить получение ответа на любое нетекстовом содержание:

my $ua = LWP::UserAgent->new; 
$ua->add_handler(response_header => sub { 
    my $resp = shift; 
    die "no text" if $resp->content_type !~m{^text/}; 
}); 
my $resp = $ua->get('http://example.com/some-image.gif'); 
Смежные вопросы