Stalker-g2

Рейтинг
96
Регистрация
21.01.2007

будут урл-буду 6-ым

так глянь последний сурс-там убрано ввв. я обновил исходник.

ну дык это и не коммерческий продукт олл ин ван :)

хошь убрать слэш убери. а так-файлик заданного формата парсит, проиндексированные от непроиндексированных отделяет.

что ещё вёбмастеру для счастья надо :)

fima32:
Последний вариант скрипта формирует запросы вида
url="www.archvestnik.ru/ru/news/991/" | url="www.archvestnik.ru/ru/news/991"
но иногда страницы индексируются без www, как бы еще этот вариант предусмотреть?

подправил в последнем варианте это...

но за рамки моего скрипта этого уже выходит :)

потому как мой скрипт - всего лишь придаток к скрипту составления карты сайта.

а зачем нужны все эти извращения-все и так понимают☝

fima32:

А вот когда ссылки http://www.archvestnik.ru/ru/news/991/ скрипт не работает, может $_ =~ /href=\"(.*)\"/; недостаточно закомментировать? может надо еще что-то поправить?
В принципе этого уже достаточно, чтобы облегчить себе труд
З.Ы. Насколько я знаю комментировать строку в Перле нужно добавлением символа # в начале строки

мда, фичу эту непродумал. оказывается для яши для страниц типа 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;
}

да, спасибо, очень интересно :)) а я подумал решить задачу по-другому, написал робот-индексатор сайта, карту составляет.

потом её проверять на проиндексированность в Я... каждую страницу

ну хоть в одном инструменте это есть? семонитор выводит только часть проиндексированных страниц

Всего: 387