АРМАДА
Софт для сбора линк-спам баз на perl
На страницу Пред.  1, 2, 3  След.
Новая тема Написать ответ Advanced Hosters - профессиональный хостинг
Пн Фев 11, 2013 12:26 pm Start Post: Софт для сбора линк-спам баз на perl 

IseeDeadPeople
Объединенная Электрическая
Зарегистрирован: 06.12.2005
Сообщений: 21733
Обратиться по нику
# Добавлено:Ср Фев 27, 2013 5:33 pmОтветить с цитатой
Там всего то нужно было исправить, там где функция

sub soglas {
my $length = shift;
my $ret = "";
@strarr = ("q","w","r","t","p","s", "d","f","g","h","j","k", "z", "x","c","v","b","n","m"); # эта строчка и была исковеркана, там что и сами можете исправить.

И вообще, эта функция вроде как и не используется в самом скрипте, что можно легко определить просто сделав поиск её обычным текстом.

DuvE писал(а):
Спасибо, туплю что-то, думал другое имелось ввиду "от цитирования поста" :ks:



Отпишите тут в посте, как заработает. Уже самому интересно. Конечно, эффективность его не в 2-3 часах работы, он создан именно в расчете на постоянную работу, если используется база именно ябисов. Но сам факт, что работает, и что то собирает (файл ready.txt наполняется периодически новыми линками), уже достаточно чтобы сказать, что работает так как положено.

Если что, снова делайте скрин, и мне на ящик полностью папку.
PORNO

DuvE +
Свой
Зарегистрирован: 14.11.2012
Сообщений: 69
Обратиться по нику
# Добавлено:Ср Фев 27, 2013 6:00 pmОтветить с цитатой
Ещё некоторые непонятки возникли, парсер после некоторого времени выводит C:\popypars\pause, тем самым останавливается. А если в go.bat не прописана пауза, то он естественно выключается. Пока что вот проблемка, а так собирает нормально и складывает в файл.

http://s05.radikal.ru/i178/1302/e1/af0cfa965db5.jpg

У меня ещё вопрос по его работе: Он берёт один признак и проходит по страницам или он при проходе по страницам учитывает все признаки?
Просто допустим вместо признака "/viewthread\.php/" можно поставить "/viewthread/", всё равно он только в ссылках проверяет, а так вряд ли что-нибудь другое вытащит. Или я не прав тут?

PS: Папка обратно на почту не приходила, так что я из цитаты код взял, как вы и говорили ранее.

IseeDeadPeople
Объединенная Электрическая
Зарегистрирован: 06.12.2005
Сообщений: 21733
Обратиться по нику
# Добавлено:Ср Фев 27, 2013 6:18 pmОтветить с цитатой
Цитата:
PS: Папка обратно на почту не приходила, так что я из цитаты код взял, как вы и говорили ранее.



Отправил вам ответ, так почему то развернул он письмо обратно мне с ошибкой не возможности доставить, поэтому вот держите: http://webfile.ru/6402404 http://webfile.ru/6402406

Это к вопросу по http://www.armadaboard.com/viewtopic.php?p=4863527#4863527

Насчет сообщения выше, сейчас посмотрю.
PORNO

IseeDeadPeople
Объединенная Электрическая
Зарегистрирован: 06.12.2005
Сообщений: 21733
Обратиться по нику
# Добавлено:Ср Фев 27, 2013 6:43 pmОтветить с цитатой
Цитата:
У меня ещё вопрос по его работе: Он берёт один признак и проходит по страницам или он при проходе по страницам учитывает все признаки?



Загружает контент странице, и берет все линки сразу при совпадение с любым признаков там где комментарий # do.pl:1
Т.е. при проходе по странице (одной, а вернее её контенту) учитывает все признаки.

Цитата:
Просто допустим вместо признака "/viewthread\.php/" можно поставить "/viewthread/", всё равно он только в ссылках проверяет, а так вряд ли что-нибудь другое вытащит. Или я не прав тут?



Можете и viewthread, но лучше поставить viewthread\.php
Да, сначала он выделяет все линки со странице в массив
Код:
my (@tmp) = ($rez =~ /<a\shref="(.*?)"/ig);

и выбирает по признакам только из массива.


Цитата:
http://s05.radikal.ru/i178/1302/e1/af0cfa965db5.jpg



Пока что запустил на своей стороне, у меня канал всего чуть более 50 Кб/сек. Сейчас посмотрю сколько соберет у меня, пока что работает как и положено. Незнаю в чем может быть проблема, там всего то первая итерация не закончена как видно по комментарию p-i '1'.

И никакую ошибку не выводит. Может какая то коллизия в памяти, но обычно это бывает если несколько потоков делать fork(); использовать. Попробуйте запустить еще раз, и посмотрите тоже время проработает или нет. В любом случае, линки он соберет новые, и файл ready.txt не потрет при перезапуске.

Обычно так внезапно, консольный скрипт на перл для виндовс ОС, "падает" без всяких ошибок, просто завершается, если коллизия в обращениях к памяти (ну т.е. как две пони одновременно хотят выпить кока-колы из одной бутылки, понимаете что будет конфликт с разгромом всей конюшни). Все таки перл не для виндовс изначально разработан, к тому же, и я то не особо грамотно пишу скрипты.

Я конечно посмотрю в чем может быть дело, обычно на это требуется время.
PORNO

IseeDeadPeople
Объединенная Электрическая
Зарегистрирован: 06.12.2005
Сообщений: 21733
Обратиться по нику
# Добавлено:Ср Фев 27, 2013 7:08 pmОтветить с цитатой
У меня работает, уже как 40 минут, собрал 909 линков.

При этом, перешел на вторую итерацию совершенно корректно, что видно по скрину.

Скорее всего ошибка памяти. По крайней мере, скрипт одни в один тот же, исходные данные по базе те же, ни единого обрыва связи, пробуйте перезапустить, упадет снова, попробуйте еще раз. Потом скажите, я думаю в какой то момент, если комп особо не грузить, должен работать стабильно. У меня вообще по моему ни разу не падал еще.

[offtop]Просьба не пугаться фону на скрине выше, там это у меня фон рабочего стола, картинка стоит такая. Меня она стимулирует к работе, и повышает силы и способности.[/offtop]
PORNO

DuvE +
Свой
Зарегистрирован: 14.11.2012
Сообщений: 69
Обратиться по нику
# Добавлено:Ср Фев 27, 2013 7:50 pmОтветить с цитатой
Парсер работает от 5 до 15 минут в среднем. Пробовал всяко, пока что нет догадок.
Я правда его вместе с хрумеров запускал. И загрузка памяти на сервере 100%, в общем попробую отдельно запустить на сервере без хрумера, потом отпишусь.

Но даже если будет ок, всё равно в планах то запускать и хрумер и скрипт на работу, как можно ещё данный вопрос решить, может перезапуск организовать?

IseeDeadPeople
Объединенная Электрическая
Зарегистрирован: 06.12.2005
Сообщений: 21733
Обратиться по нику
# Добавлено:Ср Фев 27, 2013 8:58 pmОтветить с цитатой
Попробуйте поставить перл локально, и локально попробовать запустить.

Я конечно не особый спец. по ОС, но что за ось то на удаленном хосте?

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

Цитата:
Но даже если будет ок, всё равно в планах то запускать и хрумер и скрипт на работу, как можно ещё данный вопрос решить, может перезапуск организовать?



Действительно, "простое *1 решение", но должно работать:

do.bat:

Код:
C:\Perl\bin\perl.exe do.pl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
C:\Perl\bin\perl.exe do.pl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
C:\Perl\bin\perl.exe do.pl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
C:\Perl\bin\perl.exe do.pl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
C:\Perl\bin\perl.exe do.pl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
C:\Perl\bin\perl.exe do.pl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
C:\Perl\bin\perl.exe do.pl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
C:\Perl\bin\perl.exe do.pl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
C:\Perl\bin\perl.exe do.pl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
C:\Perl\bin\perl.exe do.pl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
C:\Perl\bin\perl.exe do.pl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
C:\Perl\bin\perl.exe do.pl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
.. и таких строк сделайте (60*24)/((5+15)/2) * 2 = 411, т.е. если будет падать каждые 5-15 минут, то это количество запусков на двое суток, если будет ошибка запуска пакетного bat файла, сбавите.




Проверил, на обычном "пустом" PL файле работает.


В скрипте при запуске идет перемешка строк из yybbslinks.txt, т.е. начальный линк и последующие, каждый раз разный, будет падать каждые 5-15, ничего страшного.

И вообще, как посмотрел, скрипт написан достаточно грамотно, разделение и локализация памяти указателями my идет правильно. Это действительно больше вопрос к стабильности самого перла виндовс локализации и иного софта на рабочей площадке.

[offtop]
*1) простое решение, "Кол быстро уходил в землю под ударами увесистой плоской рукоятки дезинтегратора."

[/offtop]
PORNO

IseeDeadPeople
Объединенная Электрическая
Зарегистрирован: 06.12.2005
Сообщений: 21733
Обратиться по нику
# Добавлено:Чт Фев 28, 2013 12:55 pmОтветить с цитатой
Сообщите потом в этом топике, получается ли использовать вариант с дублированием строк запуска в bat файле, и насколько эффективно он работает при таком варианте.

Стабильно ли работает на локальном PC, не падает ли как на удаленном каждые 5-15 минут.

Стабильно ли работает, на удаленном, при выключенном хрумере.
PORNO

DuvE +
Свой
Зарегистрирован: 14.11.2012
Сообщений: 69
Обратиться по нику
# Добавлено:Ср Мар 06, 2013 3:19 amОтветить с цитатой
С автозапуском работает хорошо, но всё часто перезапускается. Из за этого он не сохраняет ссылки если не дойдёт до 100, то есть потеря идёт всё равно и иногда процесс сильно замедляется. От включенного хрумера не зависит, т.к. пытался запускать много раз без работы хрума. На сервере windows server 2003. На локалке так же вылетает, но при паузе пишет уже "Out of memory!" в конце строки.

Было бы здорово или сделать несколько потоков и чтобы он сохранял в файл каждые 20 хотя бы, если будет работать на сервере.

IseeDeadPeople
Объединенная Электрическая
Зарегистрирован: 06.12.2005
Сообщений: 21733
Обратиться по нику
# Добавлено:Ср Мар 06, 2013 6:19 pmОтветить с цитатой
Если он на твоей станции в один поток вылетает каждые 5-15 минут, то в нескольких потоках точно будет вылетать еще чаще.

Насчет ошибки, к сожалению, пока что ни чего не могу поделать. У меня работает стабильно. Я посмотрю, может где то забыл my добавить перед переменной, пока что ничего подозрительного в скрипте не вижу, что могло бы говорить о нехватке/коллизии памяти.


Насчет работы в нескольких потоков, замени строку

Код:
# FORK



// она где то 16-ая (строка) в файле, это комментарий

на

Код:


for (1..3) { fork(); }

# линейка: 1..3 = (1*2*2*2) 8 - работаем в 8 потоков; 1..5 = 32; 1..6 = 64
# функция fork() просто раздваивает процесс, дублируя и все загруженные данные, далее процессы работают не зависимо, важно переменные указывать с предлогом my

srand;
print "create process: ".$$."\n";
print "test rand (1 - 100): ".(1 + int rand(100))."\n";




Сейчас установлен в 8 потоков, если заменить 1..3 на 1..4, то будет уже 32 потока, смотри, так и бензин может кончиться, поэтому я не рекомендую ставить больше 8 потоков, на крайний попробуй 32, если не будет виснуть.

Тем более, чтобы каждый поток не перетирал файл ready.txt, одновременно открывая его на запись, я не рекомендую использовать более 8 потоков.
Изначально скрипт не просто так был написан в один потом, он и в один поток способен эффективно собирать базы, в основном чтобы канал от станции был хорошим. Мультиверсия это только для тебя считай, по причине не стабильной работы на твоей станции.



Чтобы сохранял через каждые 20 итераций, вместо 100.

Замени

Код:
if ($gllnkiteration > 100) {



(где то 101 строка в файле)

на

Код:
if ($gllnkiteration > 20) {




Если сам не справишься, вышли мне на ящик dzholysup \|\\@ hotmail.com
Нужен именно твой вариант, а не мой первоначальный, т.к. у тебя там уже свои данные в регулярных выражениях добавления линков стоят.

Лично мой вариант с такими заменами, работает, скрин.

Сохранение в файл ready.txt тоже идет как положено:

Код:
http://sebweb.be/bb/index.php?action=profile;u=485738
http://forum.racingabilities.com/index.php?topic=6464
http://xgo.crashproductionz.com/index.php?topic=190662.msg271627#msg271627
http://gebze-mebsinavsistemleri.gov.tr/index.php?topic=399496.new#new
http://travelxone.com/index.php?topic=43149
http://sylphythaiclub.com/index.php?topic=603&quot;&gt;Tara
http://forum.ncdecor.fr/index.php?action=profile;u=35341
http://buxtalk.com/index.php?action=profile;u=117907
http://puterdocs.com/smf/index.php?action=profile;u=668673
http://www.freakenergy.ru/forum/index.php?action=profile;u=249963
http://www.isopec.org/index.php?topic=22
http://insurancewebsitehosting.com/agenttalk/index.php?topic=282537.msg318093#msg318093
http://molodozhenu.ru/forum/index.php?action=profile;u=20987
http://www.haxstats.com/forum/index.php/topic,193221.new.html#new
http://www.consultantconfidential.com/index.php?topic=30390.new#new
http://www.sm64speedruns.com/forums/index.php?action=profile;u=523449
http://oldee.net/forum/index.php?action=profile;u=184429
http://www.rukcaraudio.com/index.php?topic=573402.0
http://www.senpeople.com/forums/index.php?topic=233185
http://kalasin.moph.go.th/hmh/smf/index.php?action=profile;u=5933
http://banfang.khonkaen.police.go.th/forum/index.php?action=profile;u=225427
http://americanvotersforum.com/index.php?topic=43086
http://forum.flexraid.com/index.php?action=profile;u=5441
http://omnibkk.com/index.php?action=profile;u=5172
http://www.foroupload.com/index.php?topic=145136
http://blackamericacomputers.com/smf/index.php?action=profile;u=94153
http://hawkcrack.x10.mx/smf/index.php?topic=10
http://88867honda.com/forums/index.php?topic=100127
http://www.canonrumors.com/forum/index.php?action=profile;u=268784
http://www.antiesport.com/foro/index.php?topic=10587.new#new
http://losblancos.awardspace.us/index.php?topic=5469
http://202.143.165.211/board/index.php?topic=853864.new#new
http://www.abi2009ugn.de/forum/index.php?action=profile;u=131011
http://forum.iv-multiplayer.com/index.php?action=profile;u=340850
http://www.l2luxury.org/forum/index.php?topic=16341.new#new
http://ebonyipeople.com/index.php?topic=198
http://vmask.promonetinfo.com/index.php?action=profile;u=33499
http://ebusiness-lab.epdo.teimes.gr/~xrysksepl/smf/index.php?action=profile;u=81877
http://comanches.thisismydomain.net/forum/index.php?action=profile;u=3448
http://chatorimehfil.com/index.php?topic=108752&quot;&gt;Ashley
http://forum.legal-ec.com/index.php?action=profile;u=67489
http://130.185.104.123/smf/index.php?action=profile;u=154039

PORNO

DuvE +
Свой
Зарегистрирован: 14.11.2012
Сообщений: 69
Обратиться по нику
# Добавлено:Сб Мар 16, 2013 12:02 amОтветить с цитатой
У меня на локалке вылеты иногда прекращаются, а их частота не зависит от того запускаю я однопоточную или многопоточную версию. Но вот с многопоточной проблема. Она всегда перетирает файл ready.txt то есть смысла во многих потоках почти нету. Изначально она сохраняет что-ли себе в память исходных ready.txt, затем начинает добавлять новые. И вот когда второй поток завершается после первого, то у него в памяти старые ready.txt, без ссылок добавленных при завершении первого потока.

Если я правильно представил всё себе, то может решением проблемы будет подгрузка ready.txt ещё раз перед сохранением напарсенных ссылок?

IseeDeadPeople
Объединенная Электрическая
Зарегистрирован: 06.12.2005
Сообщений: 21733
Обратиться по нику
# Добавлено:Сб Мар 16, 2013 5:22 pmОтветить с цитатой
Возможно, но это полностью не решит проблему, т.к. в любом случае несколько потоков могут одновременно использовать данный файл для записи. Есть возможность ставить блокировку, но вроде стабильно это работает только в *никсах.

Попробуйте добавить до строчек

примерно 120 строка

Код:
my $savetofile = "";
while ( my ($k, $v) = each(%baseh) ) {
$savetofile .= $v."\n";
}
fput("ready.txt", $savetofile);
$savetofile = "";
print "\n\n"." ----- saved to ready.txt ".scalar(keys(%baseh))." lines\n\n"; #sleep 55555;



следующее

Код:
        my (@base) = openfile("ready.txt");
        foreach my $el (@base) {
        my $k = lnktodomain($el);
        $baseh{$k} = $el;
        }



т.е. в итоге будет так

Код:
        my (@base) = openfile("ready.txt");
        foreach my $el (@base) {
        my $k = lnktodomain($el);
        $baseh{$k} = $el;
        }

my $savetofile = "";
while ( my ($k, $v) = each(%baseh) ) {
$savetofile .= $v."\n";
}
fput("ready.txt", $savetofile);
$savetofile = "";
print "\n\n"." ----- saved to ready.txt ".scalar(keys(%baseh))." lines\n\n"; #sleep 55555;







А также, полностью заменить функции

Код:
sub fget {
my $file = shift;
return "" unless (fexist($file));
open(RFILE, $file); flock(RFILE, LOCK_EX); my $filevalue = <RFILE>; flock(RFILE, LOCK_UN); close(RFILE);
return $filevalue;
}



Код:
sub fput {
my ($file, $putvalue) = @_;
#return file_create($file) unless(length($putvalue));
#open(WCFILE, ">". safefilename($file));
open(WCFILE, ">". $file);
flock(RFILE, LOCK_EX);
#chmod(0666, safefilename($file)) if ($use_chmod);
print WCFILE $putvalue;
flock(RFILE, LOCK_UN);
close(WCFILE);
return 0;
}



Код:
sub file_write_add {
my $file = shift;
my $text = shift;
open(ADDFILE, ">>".$file);
flock(RFILE, LOCK_EX);
print ADDFILE $text;
flock(RFILE, LOCK_UN);
close(ADDFILE);
return 1;
}



Код:
sub openfile {
my $file = shift;
open(FILE, $file);
flock(RFILE, LOCK_EX);
my (@filec) = <FILE>;
flock(RFILE, LOCK_UN);
close(FILE);
chomp(@filec);
my (@int_arr);
foreach my $p_el (@filec) {
$p_el =~ s/\r//g;
$p_el =~ s/\n//g;
push(@int_arr, $p_el);
}
return (@int_arr);
}




[offtop]Коды забирать с цитирования поста. Если будут трудности по замене, отошлите мне свою версию, в зипе, на мой ящик.[/offtop]


Блокировку можно еще организовать более современным способом, приравнивая разблокировку к закрытию файла. Вроде это должно быть еще надежнее. Но пока что реализовал в более общем формате.

Пробуйте.

Проверил у себя, работает, но лично у меня за час собрало около 150 линков. Однопоточная версия, за тоже время собрала под 900. Точно не могу сказать, или снова конфликтная реализация многопоточной версии, или же иные проблемы.
PORNO

IseeDeadPeople
Объединенная Электрическая
Зарегистрирован: 06.12.2005
Сообщений: 21733
Обратиться по нику
# Добавлено:Сб Мар 16, 2013 7:18 pmОтветить с цитатой
Все таки, как и было сделано изначально. Рекомендую использовать однопоточную версию. В вашем случае, по причине её не стабильной работы, ставьте сохранение через каждые 20 линков, что уже в исправлениях. Ну и множество строчек в файле do.bat, что также уже в исправлениях.

Также, отслеживайте тяжелые линки в базе, напр. сейчас выявил: http://soundhmm.sakura.ne.jp/bbs/yybbs.cgi Если канал слабый, то на нем и виснет работа.

В самом скрипте нет защиты от загрузки больших файлов.
Но можете поставить:

Примерно 43 строчка,

Код:
my $browser = LWP::UserAgent->new();



добавить к ней строчку

Код:
$browser->max_size(1024*250); # Лимит в 250 килобайт



т.е. в итоге будет так

Код:
my $browser = LWP::UserAgent->new();
$browser->max_size(1024*250); # Лимит в 250 килобайт



Только у меня нет уверенности, что она на всех станциях будет корректно работать, ну у кого слабые каналы, лучше поставьте.

Попробовал повторно прогнать, 8 потоков, все последние изменения, за 50 минут собрал ~240 линков.
PORNO

callema
Опытный
Зарегистрирован: 18.06.2013
Сообщений: 357
Обратиться по нику
# Добавлено:Вт Июл 30, 2013 10:35 pmОтветить с цитатой
Сделала себе данную сборку, работает пока 10 минут, Win 7 (64). Вроде вполне стабильно.

Вопрос - как понять, что файл ready.txt готов к употреблению хрумером, что программа пошла на второй круг по ябисам? Вообще если я оставлю на ночь, думаю, вполне ли достаточно будет.

IseeDeadPeople
Объединенная Электрическая
Зарегистрирован: 06.12.2005
Сообщений: 21733
Обратиться по нику
# Добавлено:Вт Июл 30, 2013 11:53 pmОтветить с цитатой
Вы знаете, то что вы разобрались за менее чем, 2-3 часа с софтом, уже повергает меня в шок настолько, что я упал со стула. На самом деле мне приятно, если это действительно так.

По вопросам..

Цитата:
как понять, что файл ready.txt готов к употреблению хрумером



Можете его открыть в любом момент, просто чтобы посмотреть количество строк в нем. Лимита нет, чем больше тем лучше. Я рекомендую оставить на ночь, и к утру посмотрите сколько собрал. Если будет хотя бы 10000 строк в файле, то я считаю что для начала это нормально. В том смысле нормально, что бесплатный софт себя оправдывает.

Там все равно сохранение идет только уникальных линков, так что впустую он работать не будет.

По утру, завтра, в этом топике мне и сообщите, сколько удалось собрать за ночь. Просьба учитывать, если вы использовали старую базу ябисов, то возможно там многие ссылки уже не содержат по адресу активный гестбук, эти линки раз в 3-6 мес тоже нужно пони-парсером (см. первый пост) обновлять. Я наверно это сам сделаю завтра, и выложу тут новые. Так что не стоит на меня ругаться, если за ночь будет меньше, чем вы ожидаете.

Насчет портируемости в хрумер.

Хрумер такой вид базы, строка = линк, понять должен без проблем, это самый простой вариант линк-спам-базы.

Цитата:
Вообще если я оставлю на ночь, думаю, вполне ли достаточно будет.



Как и сказал выше, рекомендую оставить. Даже если по какой либо ошибке закроется, файл ready.txt с готовой базой, не должен стереться/пропасть.

Цитата:
программа пошла на второй круг по ябисам



Так и задумано, то что она пойдет на второй круг, все правильно.
На ябисах спам идет постоянно, поэтому когда она будет на втором круга, на линках по котором идет сбор линков для базы, там уже контент, как и линки, будут иные, возможно новые.

На постоянную работу, без вашего вмешательства, и задуман этот софт. Smiley Eats Cursor
PORNO
Новая тема Написать ответ    ГЛАВНАЯ ~ ТЕХНИЧЕСКИЕ ВОПРОСЫ

Перейти:  





Генеральный спонсор



Партнеры