Spyder
30.12.2007, 01:30
В связи с неакутальностью гугла как поисковика для запросов типа inurl: - ограничение в 11 страниц и site: - ограничение примерно в 15 страниц, и соответсвенно разныз гугл граберов я написал нечто подобное, но работоющее с сервисом search.icq.com в которм как известно данных ограниченй нет (пока что нет =\)
Работает скрипт просто: Вы укзаываете ему запрос, путь к файлу для сохранения результата и при желании лимит на количество страниц. Страница каждый раз сохраняется в темп файл и уже оттуда идёт поиск по регулярному выражению. Естественно могут быть повторы ссылок, это особенность поисковика, особенно это станет заметно если вы не будете использовать лимит, тогда в конце файла будет много повторов.
Запросы для ICQ.com абсолютно такие же как и в гугле, т е можно использовать inurl, intext, intitle, site и тд
#!perl
use LWP;
if (@ARGV < 2) {
print "\n\n############################################## #####\n";
print "ICQ.com Search Parser by Spyder\n";
print "Usage: perl icq.pl \"<query>\" \<target> <page_limit>\n";
print "Like : perl icq.pl \"Antichat.ru\" C:/icq.txt 2\n";
print "If limit undefinide, search will be unlimited\n";
print "################################################## #\n\n\n";
exit;
}
if ($^O == "MSwin32") {
$tmp = "C:/icqtempfile.txt";
} else {
$tmp = "/tmp/icqtempfile.txt";
}
print "Start parsing for \"$ARGV[0]\"\n";
if ($ARGV[2]) {
$lim = $ARGV[2] * 10;
} else {
$lim = $pg+1;
}
&Parse;
sub Parse
{
for ($pg=0;;$pg=$pg+10) {
$q = $ARGV[0];
open (TRG,">>$ARGV[1]") or die "Can't save to $ARGV[1]:$!";
$url = "http://search.icq.com/search/results.php?q=$q&start=$pg";
$agent = LWP::UserAgent->new;
$req = HTTP::Request->new(GET => $url) or die "Can't connect to ICQ.com:$!";
$resp = $agent->request($req);
open (TMP, ">$tmp");
print TMP $resp->content;
close TMP;
open (TMP, "$tmp");
@mas = <TMP>;
if ($mas[136] =~ /<div class="nor1">/ or $pg == $lim) {
$all = $pg / 10;
print "Done! $all pages parsed\n";
print "Saved to $ARGV[1]\n";
return;
}
while (@mas) {
$str = shift @mas;
if ($str =~ m/\('http\S+'\)/) {
($q,$lnk,$q) = split /'/, $&;
print TRG "$lnk\n" if ($lnk ne $lnksf);
$lnksf = $lnk;
}
}
}
}
Работает скрипт просто: Вы укзаываете ему запрос, путь к файлу для сохранения результата и при желании лимит на количество страниц. Страница каждый раз сохраняется в темп файл и уже оттуда идёт поиск по регулярному выражению. Естественно могут быть повторы ссылок, это особенность поисковика, особенно это станет заметно если вы не будете использовать лимит, тогда в конце файла будет много повторов.
Запросы для ICQ.com абсолютно такие же как и в гугле, т е можно использовать inurl, intext, intitle, site и тд
#!perl
use LWP;
if (@ARGV < 2) {
print "\n\n############################################## #####\n";
print "ICQ.com Search Parser by Spyder\n";
print "Usage: perl icq.pl \"<query>\" \<target> <page_limit>\n";
print "Like : perl icq.pl \"Antichat.ru\" C:/icq.txt 2\n";
print "If limit undefinide, search will be unlimited\n";
print "################################################## #\n\n\n";
exit;
}
if ($^O == "MSwin32") {
$tmp = "C:/icqtempfile.txt";
} else {
$tmp = "/tmp/icqtempfile.txt";
}
print "Start parsing for \"$ARGV[0]\"\n";
if ($ARGV[2]) {
$lim = $ARGV[2] * 10;
} else {
$lim = $pg+1;
}
&Parse;
sub Parse
{
for ($pg=0;;$pg=$pg+10) {
$q = $ARGV[0];
open (TRG,">>$ARGV[1]") or die "Can't save to $ARGV[1]:$!";
$url = "http://search.icq.com/search/results.php?q=$q&start=$pg";
$agent = LWP::UserAgent->new;
$req = HTTP::Request->new(GET => $url) or die "Can't connect to ICQ.com:$!";
$resp = $agent->request($req);
open (TMP, ">$tmp");
print TMP $resp->content;
close TMP;
open (TMP, "$tmp");
@mas = <TMP>;
if ($mas[136] =~ /<div class="nor1">/ or $pg == $lim) {
$all = $pg / 10;
print "Done! $all pages parsed\n";
print "Saved to $ARGV[1]\n";
return;
}
while (@mas) {
$str = shift @mas;
if ($str =~ m/\('http\S+'\)/) {
($q,$lnk,$q) = split /'/, $&;
print TRG "$lnk\n" if ($lnk ne $lnksf);
$lnksf = $lnk;
}
}
}
}