Логин и парсер Яндекс.Вебмастера
Волею судеб захотелось отфильтровать в одном дампе индексат от неиндексата — полез в Яндекс.Вебмастер.
Ну, сразу перейду к расстройству что даже в Я.Вебмастер показывается только первая 1000 проиндексированных страниц — но парсер уже был готов, допиливать его не стал.
С использованием Jum::Web::Crawler — функцию под него я уже постил
use strict;
use Jum::Web::Crawler;my $login = q[];
my $password = q[];
my $cookie_file = q[./yandex.cookie];print qq[Enter site ID: ];
my $site_id = <STDIN>;
chop $site_id;
print $site_id." in process..\n";my $webmaster_href = q[http://webmaster.yandex.ru/site/indexed-pages.xml?host=%d&path=*&page_num=%d];
my $auth_href = q[https://passport.yandex.ru/passport?mode=auth];
my $post_data = q[display=page];
$post_data .= q[&from=passport];
$post_data .= q[&idkey=%s];
$post_data .= q[&retpath=http://webmaster.yandex.ru];
$post_data .= q[&login=]$login;
$post_data .= q[&passwd=].$password;
$post_data .= q[&twoweeks=yes];
$post_data .= q[×tamp=].time().q[520];my $login_data = Jum::Web::Crawler::getURL({href=>$auth_href, cookie_file=>$cookie_file});
my $idkey = $1 if $login_data->{content} =~ /"idkey" value="([^"]+)/;$post_data = sprintf($post_data, $idkey);
$login_data = Jum::Web::Crawler::getURL({
href => $auth_href,
post => $post_data,
cookie_file => $cookie_file,
referer => $auth_href
});if($login_data->{content} =~ /Refresh" content="0;/){
print qq[Success!\n];
}my $i = 0;
open F,">".$site_id.".links";
while(1){
my $href = sprintf($webmaster_href, $site_id, $i);
print qq[Getting $href ...\n];
$i++;
my $content = Jum::Web::Crawler::getURL({href=>$href, cookie_file=>$cookie_file});
while($content->{content} =~ /target="_blank" href="([^"]+)/isg){
my $found_href = $1;
print "\t".$found_href."\n";
print F $found_href;
}
# Цикл бесконечный - имейте в виду. Надо останавливать когда дошли до конца.
}
close F;
Одно расстройство с этой 1000 страниц. Прицельно бить Яндекс очень не хочется.