Автор Тема: определение позиции в яндексе  (Прочитано 3248 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн bemser

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 62
  • +0/-0
  • 0
    • Просмотр профиля
    • http://elbor.info
определение позиции в яндексе
« : 17 Марта 2006, 00:21:06 »
Всем привет! Есть у меня скриптик по определению позиции сайта в поисковых системах. И с недавнего времени он перестал работать корректно, а точнее сказать, вообще перестал работать с яндексом. Причиной может служить изменение структуры выдачи яндексом или ещё что-то... не знаю точно. Смотрел сам скрипт, вроде как должен работать, но что-то никак... посмотрите пожалуйста, думаю, некоторым это будет интересно.




@words=( # список ключевых запросов через запятую
        
\'гипсокартон\',
	
	
\'сухие смеси\',
	
	
\'ротбанд\',
	
	
\'утепление стен\',
	
	
\'утепление\',
	
	
\'кнауф\',
	
	
\'отделочные материалы\',
	
	
\'сухие строительные смеси\',
        );
$site=\'elbor.info\'; #проверяемый домен (+любой его субдомен) или выбранный субдомен

$needed=\'yg\';        #какие поисковики интересуют: yandex rambler aport google
$maxpages=6;           #сколько страниц выдачи просматривать, если сайт не найден на предыдущих (вывод по 50 записей на страницу)
$proxy=\'\';             #прокси-сервер в виде IP или домена и порт ([url]http://123.456.7.89:8000[/url]), при пустом значении прокси не устанавливается
                       #список смотреть здесь: [url]http://core.proxyswitcher.com/proxy_list.html[/url]
$delay=1;              #задержка между запросами в секундах
#_________________________
$useragent=\'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\'; # НЕ МЕНЯТЬ НА АЛЬТЕРНАТИВНЫЕ БРАУЗЕРЫ! ТОЛЬКО IE!
$timeout=100;#время ожидания ответа, в секундах
###############################################
# Евгений, PromoSite.RU
# [url]http://promosite.ru/services/monitoring.php[/url]
# ---------------------------------------------
# Updated by vladots [work@vladots.ru]
###############################################
$nowtime=time();
$date=localtime($nowtime);
$date=~s#(\\d+:)#
$1#i;
$n=$site;
$n=~s#\\.#_#g;
$sname=$n.\'_trends.html\';
open(F,"<$sname");
until(eof(F)) {$stext.=<F>;};
close F;
if (!($stext=~m#<html>#))
        {
        $stext=\'new\';
        }
else
        {
        $stext=~s#(<\\!--.+?-->)#$1<td></td>#gi;
        };

$code=\'%22%B8%E9%F6%F3%EA%E5%ED%E3%F8%F9%E7%F5%FA%FD%E6%E4%EB%EE%F0%EF%E0%E2%FB%F4%FF%F7%F1%EC%E8%F2%FC%E1%FE%22%B8%E9%F6%F3%EA%E5%ED%E3%F8%F9%E7%F5%FA%FD%E6%E4%EB%EE%F0%EF%E0%E2%FB%F4%FF%F7%F1%EC%E8%F2%FC%E1%FE\';
$code=~s/(%[0123456789A-F][0123456789A-F])/push(@codes,$1)/eg;
$lett=\'"ёйцукенгшщзхъэждлорпавыфячсмитьбю"ЁЙЦУКЕНГШЩЗХЪЭЖДЛОРПАВЫФЯЧСМИТЬБЮ\';
$lett=~s/(.)/push(@letters,$1)/eg;
push(@codes, \'+\');
push(@letters, \' \');

sub urlencode
{
my $str=$_[0];
my ($k, $i, $j);

for($k=0; $k<@codes; $k++)
 {
 $i=$codes[$k];
 $j=$letters[$k];
 $str=~s#$j#$i#eg;
 };
return $str;
}

use LWP::UserAgent;
use HTTP::Request;
use URI::URL;
use HTTP::Headers;

$ua = new LWP::UserAgent;
$ua->agent($useragent);
$ua->max_size(100000);
$ua->timeout($timeout);
if ($proxy ne \'\') {$ua->proxy([\'http\', \'ftp\'], $proxy);};

sub getdomain
{
my $paga=$_[0];
$paga=~s#^[url]http://##ig;[/url]
if ($paga=~m#^(.*?)[?:/]#i) {$paga=$1};
return "http://".$paga;
}

sub full
{
my $parent=$_[0];
my $child=$_[1];
my $proto;
my $domains;
my $dir;
my $file;

$parent=~s#&amp\\;#&#g;
$child=~s#&amp\\;#&#g;

if ($child=~m#\\.(xls|doc|rtf|txt|gif|jpg|jpeg|mpg|mpeg|mp3|tiff|avi|wov|exe|zip|rar|gz|tar|bz2|bz|tgz|lha|lzh|arj|mov|wav|au|qt|mpe|midi|ra|ram|rm)#i) {return \'\'};

if ($child=~m#[url]http://#i[/url]) {return $child};
if ($child=~m#^/#i)
        {
        if ($parent=~s|(https?://)?(([0-9a-zA-Z_-]+\\.)+[0-9a-zA-Z_-]{2,3})((/[0-9a-zA-Z_-]+?)*?)/?([^/]*?[?#.][^/]*)?$|$proto=$1; $domain=$2; $dirs=$4; $file=$6|ige )
                {
                if ($proto eq \'\') {$proto=\'http://\';};
                $child=~s/#.*$//;
                return $proto.$domain.$child;
                };
        }
else        {
$child=~s#\\.\\./#/#ig;

if ($parent=~s|(https?://)?(([0-9a-zA-Z_-]+\\.)+[0-9a-zA-Z_-]{2,3})((/[0-9a-zA-Z_-]+?)*?)/?([^/]*?[?#.][^/]*)?$|$proto=$1; $domain=$2; $dirs=$4; $file=$6|ige )
{
while ($child=~m#^/#)
        { if ($dirs=~m#/[0-9a-zA-Z_-]+$#)
                        {
                        $child=~s#^/##;
                        $dirs=~s#/[0-9a-zA-Z_-]+$##;
                        }
          else  {
                        print "incorrect link out of dirs\\n";
                        $child=~s#^/##;
                        };
        };
}
else {print "can\'t understand parent url..\\n";};

$child="/".$child;
$child=~s#^//#/#;
if ($proto eq \'\') {$proto=\'http://\';};

$child=~s/#.*$//;
return $proto.$domain.$dirs.$child;
        };
}




sub get
{
my $urlo=$_[0];

$hdrs = new HTTP::Headers(Accept => \'text/html\',ACCEPT_LANGUAGE => \'ru\');
$url = new URI::URL($urlo);
$req = new HTTP::Request(GET, $url, $hdrs);
$req->referer($current);
sleep($delay);
$resp = $ua->request($req);

if ($resp->is_success)
        {
        $result=$resp->content;
        print "\\n Got ".$urlo;
        $current=$urlo;
        return $result;
        }
else
        {
$msg=$resp->message;
print $msg;
return 0;
        };
};





for($i=0; $i<@words; $i++)
{
$word=$words[$i];
$currow="<td><font size=\\"-1\\">$word</font></td>";
$navrow=\'\';


#######
if ($needed=~m#y#)
{
$current=\'http://www.yandex.ru/\';
$se=$current;
$num=\'000\';
$p=0;
$navrow.="<td><font size=\\"-1\\"><a href=\\"\\#$current\\">$current</a></font></td>";
$page=\'http://www.yandex.ru/yandsearch?text=\'.urlencode($word).\'&numdoc=50\';
$result=get($page);

while(!($result=~s#<li value=(\\d+)>\\s*<div class="title">\\s*<A tabindex="\\d+" onClick="r.this,\'web/pos=\\d+\'." href="http://([a-zA-Z0-9-]+\\.)*$site#$num=$1#igse)&&($p<$maxpages))
        {
        $p++;
        print "\\n $p-th page... (50 on page)";
        $result=~s#<a.*href="(\\/yandpage\\?[^"]*)"\\s*target=_self>следующая.*#$page=full($page,$1);#igse;
        $result=get($page);
        };

print "\\n\\nYour site is number ".$num." in Yandex by the -".$word."- query.";
print "\\nProgress: ".int(100*$i/(@words+0))."%\\n\\n";
$currow.="<td><a href=\\"$page\\" target=\\"_blank\\">$num</a></td>";
if ($stext eq \'new\')
        {
        $uprow{$se}.="<tr><td><font size=\\"-1\\">$word</font></td><!--$word_$se--><td><a href=\\"$page\\" target=\'_blank\'>$num</a></td></tr>"."\\n";
        $daterow="<tr><td>Запрос|Дата</td><\\!--date--><td><font size=\\"-2\\"><a href=\\"\\#$nowtime\\">$date</a></font></td></tr>";
        }
else
        {
        $stext=~s#(<\\!--$word_$se-->)<td></td>#$1<td><a href="$page" target=\'_blank\'>$num</a></td>#i;
        $stext=~s#(<\\!--date-->)<td></td>#$1<td><font size="-2"><a href="\\#$nowtime">$date</a></font></td>#i;
        };
};
#######
if ($needed=~m#r#)
{
$current=\'http://www.rambler.ru/\';
$se=$current;
$num=\'000\';
$p=0;
$rps=0; # rambler page start in <ol> tag
$navrow.="<td><font size=\\"-1\\"><a href=\\"\\#$current\\">$current</a></font></td>";
$page=\'http://search.rambler.ru/srch?words=\'.urlencode($word).\'&limit=50\';
$result=get($page);

while(!($result=~m#<li><div class="ttl"><a onclick="R.this, \'r=[^\']*\'." href="http://([a-zA-Z0-9-]+\\.)*$site#is)&&($p<$maxpages))
        {
        $p++;
        print "\\n $p-th page...";
        $hlp=$p+1;
        $result=~s#<a href="(/srch\\?oe=\\d+&limit=\\d+&words=[^"]*)">$hlp</a>#$page=full($page,$1);#ei;
        $result=get($page);
        };
if ($result=~s#<li><div class="ttl"><a onclick="R.this, \'r=[^\']*\'." href="http://([a-zA-Z0-9-]+\\.)*$site.+$#<li><div class="ttl">#is)
        {
        $result=~s#<ol start="(\\d+)">#$rps=$1#igse;
        $result=~s#<li><div class="ttl">#$num++#igse;
        $num+=$rps-1;
        };

print "\\n\\nYour site is number ".$num." in Rambler by the -".$word."- query.";
print "\\nProgress: ".int(100*$i/(@words+0))."%\\n\\n";
$currow.="<td><a href=\\"$page\\" target=\\"_blank\\">$num</a></td>";
if ($stext eq \'new\')
        {
        $uprow{$se}.="<tr><td><font size=\\"-1\\">$word</font></td><!--$word_$se--><td><a href=\\"$page\\" target=\'_blank\'>$num</a></td></tr>"."\\n";
        $daterow="<tr><td>Запрос|Дата</td><\\!--date--><td><font size=\\"-2\\"><a href=\\"\\#$nowtime\\">$date</a></font></td></tr>";
        }
else
        {
        $stext=~s#(<\\!--$word_$se-->)<td></td>#$1<td><a href="$page" target=\'_blank\'>$num</a></td>#i;
        $stext=~s#(<\\!--date-->)<td></td>#$1<td><font size="-2"><a href="\\#$nowtime">$date</a></font></td>#i;
        };
};
#######
if ($needed=~m#a#)
{
$current=\'http://www.aport.ru/\';
$a_pages = 3*$maxpages; # 15 [on page] * 3 = 45 ~= 50 ;)
if ($a_pages > 10) { $a_pages = 10; } # для перехода к следующему списку там используется >
$se=$current;
$num=\'000\';
$p=1;
$navrow.="<td><font size=\\"-1\\"><a href=\\"\\#$current\\">$current</a></font></td>";
$page=\'http://sm.aport.ru/scripts/template.dll?r=\'.urlencode($word);
$result=get($page);

while(!($result=~s#<li value=(\\d+)>\\s*<span class=title><a href="http://([a-zA-Z0-9-]+\\.)*$site#$num=$1#igse)&&($p<$a_pages))
        {
        $p++;
        print "\\n $p-th page... (15 on page / 3 pages)";
        $result=~s#<a href=(template.dll\\?r[^>]+)>$p</a>#$page=full($page,$1);#ei;
        $result=get($page);
        };
print "\\n\\nYour site is number ".$num." in Aport by the -".$word."- query.";
print "\\nProgress: ".int(100*$i/(@words+0))."%\\n\\n";
$currow.="<td><a href=\\"$page\\" target=\\"_blank\\">$num</a></td>";
if ($stext eq \'new\')
        {
        $uprow{$se}.="<tr><td><font size=\\"-1\\">$word</font></td><!--$word_$se--><td><a href=\\"$page\\" target=\'_blank\'>$num</a></td></tr>"."\\n";
        $daterow="<tr><td>Запрос|Дата</td><\\!--date--><td><font size=\\"-2\\"><a href=\\"\\#$nowtime\\">$date</a></font></td></tr>";
        }
else
        {
        $stext=~s#(<\\!--$word_$se-->)<td></td>#$1<td><a href="$page" target=\'_blank\'>$num</a></td>#i;
        $stext=~s#(<\\!--date-->)<td></td>#$1<td><font size="-2"><a href="\\#$nowtime">$date</a></font></td>#i;
        };
};
#######
if ($needed=~m#g#)
{
$current=\'http://www.google.com/\';
$se=$current;
$num=\'000\';
$p=0;
$gps=0; # google page start
$navrow.="<td><font size=\\"-1\\"><a href=\\"\\#$current\\">$current</a></font></td>";
$page=\'http://www.google.com/search?q=\'.urlencode($word).\'&num=10&hl=ru\';
$result=get($page);
$result=~s#<blockquote class=g>\\s*<p class=g>.+?</blockquote>##igs; # kill 2nd level snippets

while(!($result=~m#<p class=g><a.+?href="http://([a-zA-Z0-9-]+\\.)*$site#igs)&&($p<$maxpages))
        {
        $p++;
        print "\\n $p-th page...";
        $result=~s#<td nowrap><a href=(/search\\?q=[^>]*)><.+?>
<span class=b>.+?</span></a></table>#$page=full($page,$1);#ei;
        $result=get($page);
        };

        # get google page start
        $result=~s#<td id=resultStats.+?><.+?>.+?<b>(\\d+)</b>#$gps=$1#igse;

        @garr=split(\'<p class=g>\',$result);
        for($j=0; $j<@garr; $j++) {
                $garr[$j]=~s#^<a.+?href="http://([a-zA-Z0-9-]+\\.)*$site#$num=$j+$gps-1; $j=@garr+1;#igse;
        };

print "\\n\\nYour site is number ".$num." in Google by the -".$word."- query.";
print "\\nProgress: ".int(100*$i/(@words+0))."%\\n\\n";
$currow.="<td><a href=\\"$page\\" target=\\"_blank\\">$num</a></td>";
if ($stext eq \'new\')
        {
        $uprow{$se}.="<tr><td><font size=\\"-1\\">$word</font></td><!--$word_$se--><td><a href=\\"$page\\" target=\'_blank\'>$num</a></td></tr>"."\\n";
        $daterow="<tr><td>Запрос|Дата</td><\\!--date--><td><font size=\\"-2\\"><a href=\\"\\#$nowtime\\">$date</a></font></td></tr>";
        }
else
        {
        $stext=~s#(<\\!--$word_$se-->)<td></td>#$1<td><a href="$page" target=\'_blank\'>$num</a></td>#i;
        $stext=~s#(<\\!--date-->)<td></td>#$1<td><font size="-2"><a href="\\#$nowtime">$date</a></font></td>#i;
        };
};


###
$curout.="<tr>$currow</tr>\\n";
};


if ($stext eq \'new\')
        {
        $stext=\'<html><body><h1>Мониторинг</h1>\';
        while(($k,$v)=each(%uprow))
                {
                $stext.="<a name=\\"$k\\"></a><h3>$site : $k</h3><table border=1 cellspacing=0 cellpadding=5>$daterow$v</table>";
                };
        $stext.="<hr><h1>По датам:</h1>";
        };
$stext.="<a name=\'".$nowtime."\'></a><h3>$site : ".localtime($nowtime)."</h3><table border=1 cellspacing=0 cellpadding=5><tr><td>Запрос|SE</td>$navrow</tr>\\n$curout</table><p>Сайт на первых $maxpages страницах выдачи может быть не найден<hr>";

if ($st eq \'new\') {$stext.=\'</body></html>\';};

$stext=~s#000#нет на $maxpages стр.)#g;
open(F,">$sname");
print F $stext;
close F;
print "\\a";

гипсокартон, сухие смеси
http://elbor.info

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
определение позиции в яндексе
« Ответ #1 : 17 Марта 2006, 10:13:12 »
какой-то "макаронный" код, сложен для понимания.

через WWW::Search не легче?

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28