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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как заставить LWP обойти все ссылки на сайте? Вопрос конечно децкий 
V
    Опции темы
nitr
Дата 21.9.2006, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



так попробуй по всем страничкам... но его можно "наворотить", это как пример
Код

#!/usr/bin/perl -w    
use strict;    
use LWP::UserAgent;    
get_a("http://www.gpr.com.ua");

sub get_a {
    my $url = shift;
    my $ua = LWP::UserAgent->new; #новый экземпляр    
    my $content = $ua->get($url)->content; #воть вся страничка тут ;)    
    my $hash;    
    $hash->{"$url$1"}++ while $content =~ m{<A[^>]*?HREF=["'](.+?)['"][^>]*?>.*?</A>}smig;    
    foreach (sort keys %$hash) {
        get_a($_);
    }
}



--------------------
PM   Вверх
trigger
Дата 21.9.2006, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

get_a("http://www.gpr.com.ua");


Код

foreach (sort keys %$hash) {
get_a($_);
}

это не понял поясните что это и что  сдесь происходит get_a вообще смутило меня  
я понимаю что это подпрограмма но...
PM MAIL WWW ICQ   Вверх
nitr
Дата 21.9.2006, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



это так и есть... так сказать... рекурсия... в самой функции (процедуре) вызываем саму себя =)

вот и получаем ссылки и проходим по всем... это небыстрый процесс smile)
можно создать более глобальный список.. либо изменить подпрограмму, чтобы недублировалось

я протестить не могу, на работе нахожусь smile пишу скрипты без проверки ... но рабочие 100% ;)


--------------------
PM   Вверх
trigger
Дата 21.9.2006, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



smile  жаль но не работает - хотя дело наверное в версии моего перла 
смешно - но до сих пор мучаюсь  
PM MAIL WWW ICQ   Вверх
nitr
Дата 22.9.2006, 02:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



вот держи труженник...
Код

#!/usr/bin/perl -w
use strict;
use LWP::UserAgent;

our $hash;
get_a('http://www.gpr.com.ua');
print join "\n", sort keys %$hash;  #либо в массив my @urls = sort keys %$hash;

sub get_a {
    my $url = shift;
    my $link = 'http://www.gpr.com.ua';
    my $ua = LWP::UserAgent->new;
    my $content = $ua->get($url)->content;
    while ($content =~ m{<\s*?A[^>]*?HREF\s*?=\s*?["'](.+?)['"][^>]*?>.*?<\s*?/A\s*?>}smig) {
        my $link = $link.$1;
        $hash->{"$link"} = 0 unless exists $hash->{"$link"} || $link !~ m{http://www.gpr.com.ua/}; #в твоём случае и такое надо ;) чтобы левые ссылки не проверяить
    }
    foreach (sort keys %$hash) {
    next if $hash->{$_} == 1;                #дальше... тут уже были 
    $hash->{$_} = 1;                         #пометим что были
         get_a($_);
    }
}



--------------------
PM   Вверх
trigger
Дата 22.9.2006, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



О ЧЕЛОВЕЧИЩЕ с большой буквы - благодарен я безбрежно Вашему терпению и помощи немощным как я. Обещаю что когда всетки буду знать PERL достаточно хорошо то буду также относиться к таким деревянным как я на данный момент. Хвала тебе и оды пою.

Жаль конечно что что своим умом не дошел до этого. Опыт скромный

Еще разз спасибо !

Это сообщение отредактировал(а) trigger - 22.9.2006, 12:52
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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