Может кто делал? @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 9 ] 
*   Список форумов / Начинка и техника / Программирование для WWW » ответить » создать топик « | »
Автор Сообщение
MpaK
новый человек
0
Сообщения: 41
Зарегистрирован: 25.06.02
Откуда: Ufa
Заголовок сообщения: Может кто делал?
Сообщение Добавлено: 21 Июнь 2003, 13:04:19 
Рекурсивно или нет, проход по всему сайту... примерчик, разумеется если кто делал...

_________________
...cut me, hurt me, rape my life...
Akela
Констататор
12
Сообщения: 3239
Зарегистрирован: 03.05.02
Откуда: Европа
Сообщение Добавлено: 21 Июнь 2003, 17:23:56 
MpaK, поподробнее мона?
MpaK
новый человек
0
Сообщения: 41
Зарегистрирован: 25.06.02
Откуда: Ufa
Сообщение Добавлено: 23 Июнь 2003, 10:16:54 
начал писать скрипт, который проходит по сайту собирает все ссылки на его же страницы (в последствии удаляет все теги из страниц и для каждой страницы создает список уникальных слов, ну типа для поиска)… первая версия была с рекурсией, но пришлось убрать, ресурсы кушались неимоверно! сразу оговорюсь, что код не шедевр, вот и понимаю, что все очень примитивно

:glasses:
Код:
#!c:\perl\bin\perl
#!/usr/bin/perl
use LWP::Simple;

$pred='над &%@ X#$ в около тут а около еще какой to из такую такой рядом где-то то здесь вот он она они оно ты я мы';
my (%h_2index, %h_indexed);
$url='eclipse.bestweb.ru/';
$start_page='index.htm';

print "Content-Type: text/html\n\n";
open FW, ">scan.txt";
&seek_n_destroy($main_start_page);
close FW;

@indexed=keys %h_indexed;
open FW, ">indexed.txt";
foreach $page (@indexed){
   print FW "$page\n";
}
close FW;

sub seek_n_destroy{
begin_again:
   my $text=get("http://$url$start_page");
    goto nop if($text eq '');
    my @all_links=&extract_links($text);
   foreach $link2ver(@all_links){
       $h_2index{$link2ver}=$link2ver if((!exists($h_indexed{$link2ver})));
   }
    $text=~s/\>/>\n/igm;
    $text=~s/\<.*\>//gm;
    $text=~s/[\?,\!,\",\']//igm;
   undef $h_words;
   undef @a_words;
   while($text=~m/\s*([\d,\w,\.,а-яА-я]+)s*/igm){
       my $word=$1;
        $word=lc($word);
        $word=&rutextdown($word);
        my $notin=1;
        foreach $word_in (@a_words){
           if(($word_in eq $word)||($pred=~m/$word/igm)){
               $notin=0;
                last;
            }
      }
        push @a_words, $word if($notin);
    }
    undef $word_line;
    foreach $word (@a_words){
      $word_line.=$word.'|';
    }
    print FW "$start_page - $word_line\n";
  nop:
    $h_indexed{$start_page}=$start_page;
    delete($h_2index{$start_page});
   $start_page=(@start_page=keys(%h_2index))[0];
   goto begin_again if($start_page ne '');
}

sub extract_links{
   my $text=shift;
    my @ret_arr;
   while($text=~m/a\s*href=\"([\w,\.,\-,\&,\/,\~,\?,\d,\=,\%]+)\"/img){
       print $1."\n";
        push @ret_arr, $1;
    }
    return @ret_arr;
}


худо бедно работает, но загвоздка появилась, когда к примеру попадается ссылка вида http://url/catalog/
а там уже как бы из index.html работает, то бишь из своего каталога... т.е. как я понимаю нужно еще как-то к извлеченным ссылкам добавлять каталог? но как?
может кто-то уже писал нечто подобное...

_________________
...cut me, hurt me, rape my life...
Akela
Констататор
12
Сообщения: 3239
Зарегистрирован: 03.05.02
Откуда: Европа
Сообщение Добавлено: 24 Июнь 2003, 15:17:08 
Понятно. Что делалось - ясно. Теперь плз в чём была конкретная цель? Поиск? Или навигация? Или что?
MpaK
новый человек
0
Сообщения: 41
Зарегистрирован: 25.06.02
Откуда: Ufa
Сообщение Добавлено: 24 Июнь 2003, 15:24:24 
Akela, поиск... хотя можно и для другого использовать, лишь бы собрать все страницы сайта

_________________
...cut me, hurt me, rape my life...
MpaK
новый человек
0
Сообщения: 41
Зарегистрирован: 25.06.02
Откуда: Ufa
Сообщение Добавлено: 25 Июнь 2003, 14:57:06 
все, всем спасибо проблемку решил...
если кому интересно, вот не самый чистый, но все же работающий код:
Код:
#!/usr/bin/perl

use WWW::Robot;
use LWP::Simple;

$pred='это вы вашей над под с со &%@ или для X#$ в около тут а около еще какой to из такую такой рядом где-то то здесь вот он она они оно ты я мы';

$rootDocument = 'http://mpak.bestweb.ru/';

$robot = new WWW::Robot('NAME'     =>  'DataCenterSE',
                           'VERSION'  =>  1.000,
                           'EMAIL'    =>  'fred@foobar.com', 'DELAY' => 0, 'IGNORE_TEXT'=>0);

$robot->addHook('follow-url-test', \&test_url_hook);
#$robot->addHook('invoke-on-followed-url', \&url_hook);
$robot->addHook('invoke-on-contents', \&url_hook);
$robot->run($rootDocument);

open  FW, ">indexed.txt";
print FW @to_out;
close FW;

sub test_url_hook{
      my($robot, $hook, $url) = @_;
      return 0 unless $url->scheme eq 'http';
      return 0 if $url =~ /redirect.html/;
      return 0 if $url =~ /\.(gif|jpg|png|xbm|au|wav|mpg)$/;
      #---- we're only interested in pages on our site ----
      print "[ $url ]\n";
#      return 1;
      return $url =~ /^$rootDocument/;
}

sub url_hook {
   my($robot, $hook, $url, $response, $structure) = @_;
#   my($robot, $hook_name, $from_url, $to_url) = @_;
#   my($robot, $hook_name, $url) = @_;

   my $text=get($url);
#   my $text=$structure->as_text;
#    print $text;
    $text=~s/\<script.+\<\/script\>//imgs;
    $text=~s/\>/>\n/igm;
    $text=~s/\<.+\>//gm;
    $text=~s/\<\/.+\>//gm;
    $text=~s/[\?,\!,\",\',\.,\:,\+,\*]//igm;
   my $h_words;
   my @a_words;
   while($text=~m/\s*([\d,\w,\.,а-яА-я]+)s*/igm){
       my $word=$1;
        $word=lc($word);
        $word=&rutextdown($word);
        my $notin=1;
        foreach $word_in (@a_words){
           if(($word_in eq $word)||($pred=~m/$word/igm)){
               $notin=0;
                last;
            }
      }
        push @a_words, $word if($notin);
    }
    undef $word_line;
    foreach $word (@a_words){
      $word_line.=$word.' ';
    }
    push @to_out, "$url <+> $word_line\n";

    return 1;
}

#-----------------------------------------------------------------------------------------------------#
# Перекодировщик win <-> koi <-> iso <-> dos
# $str=encoder($str,"win","dos");
# $str=encoder($str,"dos","uc");
# $str=encoder($str,"dos","lc");
#
sub encoder {
my ($enstring,$cfrom,$cto)=@_;
my %codefunk=(
win=>"\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF",
koi=>"\xE1\xE2\xF7\xE7\xE4\xE5\xF6\xFA\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF2\xF3\xF4\xF5\xE6\xE8\xE3\xFE\xFB\xFD\xFF\xF9\xF8\xFC\xE0\xF1\xC1\xC2\xD7\xC7\xC4\xC5\xD6\xDA\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD2\xD3\xD4\xD5\xC6\xC8\xC3\xDE\xDB\xDD\xDF\xD9\xD8\xDC\xC0\xD1",
iso=>"\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF",
dos=>"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF",

koi_lc=>"tr/\xB3\xE0-\xFF/\xA3\xC0-\xDF/", koi_uc=>"tr/\xA3\xC0-\xDF/\xB3\xE0-\xFF/",
win_lc=>"tr/\xA8\xC0-\xDF/\xB8\xE0-\xFF/", win_uc=>"tr/\xB8\xE0-\xFF/\xA8\xC0-\xDF/",
alt_lc=>"tr/\xF0\x80-\x9F/\xF1\xA0-\xAF\xE0-\xEF/", alt_uc=>"tr/\xF1\xA0-\xAF\xE0-\xEF/\xF0\x80-\x9F/",
iso_lc=>"tr/\xA1\xB0-\xCF/\xF1\xD0-\xEF/", iso_uc=>"tr/\xF1\xD0-\xEF/\xA1\xB0-\xCF/",
dos_lc=>"tr/\x80-\x9F/\xA0-\xAF\xE0-\xEF/", dos_uc=>"tr/\xA0-\xAF\xE0-\xEF/\x80-\x9F/",
mac_lc=>"tr/\xDD\x80-\xDF/\xDE\xE0-\xFE\xDF/", mac_uc=>"tr/\xDE\xE0-\xFE\xDF/\xDD\x80-\xDF/"
);

if (!$enstring or !$cfrom or !$cto) {return ''}
else {
    if ($cfrom ne "" and $cto ne "lc" and $cto ne "uc") {
       $_=$enstring;$cfrom=$codefunk{$cfrom};$cto=$codefunk{$cto};
       eval "tr/$cfrom/$cto/"; return $_;
    }
    elsif (($cfrom ne "") and ($cto eq "lc" or $cto eq "uc")) {
       $_=$enstring; $cfrom=$codefunk{"$cfrom\_$cto"};
       eval $cfrom; return $_;
    }
}
return $enstring;
}

sub rutextdown {my $pvdtextstring=shift; return encoder($pvdtextstring,"win","lc")}


_________________
...cut me, hurt me, rape my life...
CutCopyPaste Муж.
соучастник
0
Сообщения: 516
Зарегистрирован: 21.06.03
Откуда: Москва
Сообщение Добавлено: 25 Июнь 2003, 15:13:47 
чего то не пашет... :cry:

_________________
Пьяный русский хакер практически непобедим!
MpaK
новый человек
0
Сообщения: 41
Зарегистрирован: 25.06.02
Откуда: Ufa
Сообщение Добавлено: 25 Июнь 2003, 16:04:30 
у тебя вот эти библиотеки есть?
use WWW::Robot;
use LWP::Simple;

результат файл файл, в котором строка это урл <+> влова на этой странице

_________________
...cut me, hurt me, rape my life...
CutCopyPaste Муж.
соучастник
0
Сообщения: 516
Зарегистрирован: 21.06.03
Откуда: Москва
Сообщение Добавлено: 25 Июнь 2003, 16:28:38 
MpaK,
упс, нету, ща добавлю.…
сорри.. :gent:

_________________
Пьяный русский хакер практически непобедим!
*   Список форумов / Начинка и техника / Программирование для WWW « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 9 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100