будут урл-буду 6-ым
так глянь последний сурс-там убрано ввв. я обновил исходник.
ну дык это и не коммерческий продукт олл ин ван :)
хошь убрать слэш убери. а так-файлик заданного формата парсит, проиндексированные от непроиндексированных отделяет.
что ещё вёбмастеру для счастья надо :)
подправил в последнем варианте это...
но за рамки моего скрипта этого уже выходит :)
потому как мой скрипт - всего лишь придаток к скрипту составления карты сайта.
а зачем нужны все эти извращения-все и так понимают☝
мда, фичу эту непродумал. оказывается для яши для страниц типа http://www.archvestnik.ru/ru/news/991/ надо спрашивать про страницу http://www.archvestnik.ru/ru/news/991
Чуток переделал скрипт с учётом этого недостатка, а ещё и чтобы файлы лога, индекса и неиндекса обнулял при запуске каждом.
Кроме того, в файл log.txt теперь пишутся запросы к яндексу. В целях дебаггинга.
use strict; use LWP::Simple; open SITEMAPIND, ">c:\\Crawler\\sitemap.noind.txt"; close SITEMAPIND; open SITEMAPNOIND, ">c:\\Crawler\\sitemap.noind.txt"; close SITEMAPNOIND; open MYLOG, ">c:\\Crawler\\log.txt"; close MYLOG; open SITEMAP, "<c:\\Crawler\\sitemap.txt"; my @url_list; my $url; while(<SITEMAP>) { chomp; #$_ =~ /href=\"(.*)\"/; $url = $_; # %2F = / # %3F = ? # %3D = = # %26 = & while($url =~ s/http:\/\///) {}; while($url =~ s/\//\%2F/) {}; while($url =~ s/\?/\%3F/) {}; while($url =~ s/=/\%3D/) {}; while($url =~ s/\&/\%26/) {}; while($url =~ s/ //) {}; push @url_list, $url; } while($url = pop @url_list) { my $link; my $url_slash; my $url_slash_no_www; my $url_no_www = $url; $url_no_www =~ s/www\.//; if($url =~ /\%2F$/) { $url =~ /(.*)\%2F$/; $url_slash = $1; $url_slash_no_www = $url_slash; $url_slash_no_www =~ s/www\.//; $link = "http://www.yandex.ru/yandsearch?rpt=rad&text=url%3D%22$url%22+%7C+url%3D%22$url_slash%22+%7C+url%3D%22$url_no_www%22+%7C+url%3D%22$url_slash_no_www%22"; } else { $link = "http://www.yandex.ru/yandsearch?rpt=rad&text=url%3D%22$url%22+%7C+url%3D%22$url_no_www%22"; } open MYLOG, ">>c:\\Crawler\\log.txt"; print MYLOG "$link\n"; close MYLOG; my $content = get $link; if($content =~ /Сохраненная копия/) { while($url =~ s/\%2F/\//) {}; while($url =~ s/\%3F/\?/) {}; while($url =~ s/\%3D/\=/) {}; while($url =~ s/\%26/\&/) {}; open SITEMAPIND, ">>c:\\Crawler\\sitemap.ind.txt"; print SITEMAPIND "http://$url\n"; close SITEMAPIND; print "\nIND: $url\n"; } else { while($url =~ s/\%2F/\//) {}; while($url =~ s/\%3F/\?/) {}; while($url =~ s/\%3D/\=/) {}; while($url =~ s/\%26/\&/) {}; open SITEMAPNOIND, ">>c:\\Crawler\\sitemap.noind.txt"; print SITEMAPNOIND "http://$url\n"; close SITEMAPNOIND; print "\nNOIND: $url\n"; } sleep 1; }
На код чур не ругаться. Я не профи :)
ну... нужна перловая библиотека LWP::Simple;
В активперл для винды вроде как по умолчанию стоит.
Файл sitemap.txt ожидает в формате
<a href="http://www.archvestnik.ru/ru/news/991/"></a>
<a href="http://www.archvestnik.ru/ru/news/990/"></a>
Если спросто список урлов
http://www.archvestnik.ru/ru/news/991/
http://www.archvestnik.ru/ru/news/990/
Надо закомментить
$_ =~ /href=\"(.*)\"/;
а дальше
cmd
cd c:\crawler
crawler.pl
И смотрим.
яндекс.xml жадный-1000 запросов сутки, а мне по 4000 в сутки проверять надо.
так-проверяет нормально. а xml я думаю быстро заблочит
собственно говоря такой скрипт на перле, размещённый в папке c:\crawler откроет файлик sitemap.txt, который содержит на каждой строке по ссылке и разобьёт его на 2 файла sitemap.ind.txt и sitemap.noind.txt - проиндексированные и непроиндексированные странички.
use strict; use LWP::Simple; open SITEMAP, "<c:\\Crawler\\sitemap.txt"; my @url_list; my $url; while(<SITEMAP>) { chomp; $_ =~ /href=\"(.*)\"/; $url = $1; # %2F = / # %3F = ? # %3D = = # %26 = & $url =~ s/\/$//; while($url =~ s/http:\/\///) {}; while($url =~ s/\//\%2F/) {}; while($url =~ s/\?/\%3F/) {}; while($url =~ s/=/\%3D/) {}; while($url =~ s/\&/\%26/) {}; while($url =~ s/ //) {}; push @url_list, $url; } while($url = pop @url_list) { my $link = "http://www.yandex.ru/yandsearch?rpt=rad&text=url%3D%22$url%22"; my $content = get $link; if($content =~ /Сохраненная копия/) { while($url =~ s/\%2F/\//) {}; while($url =~ s/\%3F/\?/) {}; while($url =~ s/\%3D/\=/) {}; while($url =~ s/\%26/\&/) {}; open SITEMAPIND, ">>c:\\Crawler\\sitemap.ind.txt"; print SITEMAPIND "http://$url\n"; close SITEMAPIND; print "\nIND: $url\n"; } else { while($url =~ s/\%2F/\//) {}; while($url =~ s/\%3F/\?/) {}; while($url =~ s/\%3D/\=/) {}; while($url =~ s/\%26/\&/) {}; open SITEMAPNOIND, ">>c:\\Crawler\\sitemap.noind.txt"; print SITEMAPNOIND "http://$url\n"; close SITEMAPNOIND; print "\nNOIND: $url\n"; } sleep 1; }
да, спасибо, очень интересно :)) а я подумал решить задачу по-другому, написал робот-индексатор сайта, карту составляет.
потом её проверять на проиндексированность в Я... каждую страницу
ну хоть в одном инструменте это есть? семонитор выводит только часть проиндексированных страниц