Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Определение положения страницы в выдаче yandex.ru


Автор: Leshik 21.10.2006, 23:01
Всем привет.
Пожалуйста не оставьте без внимания.
У меня следующая задача: надо для адреса страницы и запроса, указанных пользователем, определить положение страницы в выдаче yandex.ru.
Вот что я написал:
Код

#! perl -w

use strict;
use LWP::Simple;

my @num;
my @links;
my $url='http://www.yandex.ru';
my $action = '/yandsearch';
my $form_name = 'stype';
my $search_type = 'www';
my $input_name = 'text';
my $select_value = 'numdoc';
my $value_num = '50'; 
my $p;
my $next_link;
my $req;
my $link;
my $num_search;
my $correct=0;
my $search = "www.forum-spain.ru";
my $value = 'forum';

$req = $url.$action.'?'.$form_name.'='.$search_type.'&'.$input_name.'='.$value.'&'.$select_value.'='.$value_num;

    while (get( $req )) 
        {    
            $next_link = get( $req );
            $p=$next_link;
                
                if($p =~ s/\<a\stabindex\=\"(\d{1,2})\".*?href\=\"(http:\/\/$search.*?)\"//)
## ищу в тексте строку вида   <a tabindex="11" onclick="r(this, 'iweb/path=80.22.82/vars=84=94');" href="http://www.wcg.ru/games/##index.phtml?id=4&rules=1" target="_blank">WCG - Игры</a>
##вырезаю из неё адрес и положение адреса (значение tabindex'а)

                    {
                        push( @num, $1."\n");
                        push( @links, $2."\n" );
                    last;
                    }
                
                if ($next_link =~ /\"next\"\shref\=\"(\/.*?)\"/)
##ищу ссылку на следующую страницу
                    {
                        $link=$1;
                        $req = $url.$link;
                        $correct=$correct+50;
##увеличываю $correct на 50, так как среди предыдущих 50 адресов страница не найдена
                    }
                else 
                    {
                        last;
                    }
        }

$num_search=$num[0]+$correct-1;
## -1, так как значение tabindex'а равно положения сайта +1

print "CTPAHuLlA @links 3AHuMAET\n$num_search MECTO HA yandex.ru no 3AnPOCy $value\n";


У меня всё работает, место страницы находится верно, но всё это происходит очень медленно.
Не могли бы вы мне подсказать, что я делаю не так, и как надо делать для быстрого поиска положения сайта.

Автор: amg 23.10.2006, 07:19
Заменить строки
Код
while (get( $req ))
{
  $next_link = get( $req );
на
Код

while ($next_link = get( $req ))
{
чтобы не лазить в интернет два раза за одним и тем же

Автор: Leshik 23.10.2006, 13:45
Спасибо.
Ещё вот такой вопрос:
почему когда я ввожу русское слово (Например 'футбол'), и присваиваю это значение $value:
Код

$value = <STDIN>;
chomp($value);

 у меня не работает; а если пишу просто:   
Код
my $value = "футбол";

то всё работает и всё находится.
ПОдскажите, как это можно исправить.

Автор: amg 23.10.2006, 14:04
Наверное, под виндой дело происходит? Там ты вводишь русское слово в DOS-консоли, и вводится оно в досовской кодировке. Нужно перекодировать в CP1251. Модуль Encode. Про это уже много здесь писали.

Добавлено @ 14:16 
http://forum.vingrad.ru/index.php?showtopic=113144&view=findpost&p=864166 Там только нужно заменить cp1251 на cp866, кажется, и utf8  на cp1251

Автор: Leshik 23.10.2006, 18:24
Большое спасибо, теперь всё работает. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)