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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определение положения страницы в выдаче yandex.ru 
V
    Опции темы
Leshik
Дата 21.10.2006, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет.
Пожалуйста не оставьте без внимания.
У меня следующая задача: надо для адреса страницы и запроса, указанных пользователем, определить положение страницы в выдаче 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";


У меня всё работает, место страницы находится верно, но всё это происходит очень медленно.
Не могли бы вы мне подсказать, что я делаю не так, и как надо делать для быстрого поиска положения сайта.
PM MAIL   Вверх
amg
Дата 23.10.2006, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

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



Заменить строки
Код
while (get( $req ))
{
  $next_link = get( $req );
на
Код

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

PM MAIL   Вверх
Leshik
Дата 23.10.2006, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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

то всё работает и всё находится.
ПОдскажите, как это можно исправить.
PM MAIL   Вверх
amg
Дата 23.10.2006, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

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



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

Добавлено @ 14:16 
См. например здесь. Там только нужно заменить cp1251 на cp866, кажется, и utf8  на cp1251
PM MAIL   Вверх
Leshik
Дата 23.10.2006, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Большое спасибо, теперь всё работает. smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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