PDA

Просмотр полной версии : Cкрипт для отсеивания мыл


Lancellot
01.09.2007, 15:57
ку
встеретился с такй проблемой, есть тхт файл в нём станицы в которых мыла .не подскажете скрипт желательно на перле для отсеивания мыл с страниц типа парсера,может я не внимательно искал но вроди не нашол на форуме)
спс

Piflit
01.09.2007, 15:58
тут глянь (http://hackstyle.narod.ru/cpp_findmail.txt)

Lancellot
01.09.2007, 16:01
что-то невразумительное ))
а по просче есть?хотя идея ясна

n1†R0x
01.09.2007, 16:38
Написал небольшой скрипт, по-прежнему не работает с двойными доменами (user@company.net.ua), но с обычными вроде норм, протестируйте плз)

<?php
if (!isset($fname))
{
print "<form method='post'>Plz print the filename:<br/><input type='text' name='fname' length='15' maxlength='20'/><br/>";
print "<input type='submit' name='go' value='go'></form><br/><br/>";
}
else
{
$i=0;
$fname = $_POST['fname'];
$error = "Cannot open file $fname. <br> <a href='javascript:history.go(-1);'>Get Back</a>";
$file = file_get_contents($fname) or die ($error);
$pattern = "/([a-z_-]+@([a-z][a-z-]*\.)+([a-z]{3}|ru|com|net|org|gov|edu|mil|info|biz|cc|net.ua| com.ua|org.ua|org.ru|com.ru|net.ru|spb.ru))/im";
preg_match_all($pattern, $file, $ok);
while (@$ok[0][$i])
{
print $ok[0][$i]."<br>";
$i++;
}
}
?>

Ch3ck
01.09.2007, 19:51
Дети мои...

preg_match("|[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,6}|i", $email, $out);
echo $out[0];

ant0ha
01.09.2007, 19:52
эффективнее же искать до первого пробела или переноса строки до и после собаки, и тогда не будет проблем с двойными и более доменами :)

n1†R0x
02.09.2007, 00:31
эффективнее же искать до первого пробела или переноса строки до и после собаки, и тогда не будет проблем с двойными и более доменами :)
тоже не лучший вариант)
представь себе, что мыла, предположим, в таком формате:

<a href='mailto:blablabla'>email</a><br>

у меня в мыслях только 2 варианта: чтение до символа, не входящего в диапазон буквы_цифры, либо чтение до последней точки.. как реализовать второе - не знаю :(

Underwit
02.09.2007, 00:57
вот тут глянь http://forum.antichat.ru/showpost.php?p=290912&postcount=44

а вот на перле от Genom

#!/usr/bin/perl

if (@ARGV==0) { print "\n###########Genom Spam List Bilder v1.3##################\n\nUse: perl spam-bilder.pl /start_folder/\n"; exit;};

$asd=@ARGV[0];
$i=0;
$a=1;
@dir[0]=@ARGV[0];
opendir FF, $asd;
while ($zz=readdir FF) {
$aa=$zz=~m/\./;
if ($aa==0) {if ($asd=="/") {@dir[$i]="$asd$zz";$i++;}else{@dir[$i]="$asd/$zz";$i++;} }
closedir dir;}

papki(@dir[$a]);
for $qq (@dir){print "$qq\n"}; # убери в начале решетку если хочешь чтобы выводились найденные папки

##################рекурсивная функция которая забивает пути к папкам в массив @dir ##################
sub papki {
opendir FF,@dir[$a];
while ($zz=readdir FF) {
$aa=$zz=~m/\./;
if ($aa==0) {@dir[$i]="@dir[$a]/$zz";$i++;} };
closedir dir;$a=$a+1;

if ($a<$i) {papki(@dir[$a]);}
};@dir[$a];
###########################функция поиска файлов################

# получаем имена всех файлов в обнаруженных папках и заносим их в массив @file
# под категорию файлов подпадают объекты в именах которых есть точка--- так что некоторые папки может
# не обработать(то есть признает их файлами)- это связано с тем что пишу под виндой и параметры
# распознования файлов линукса -e и -f у меня почемуто не работают =( ---
$xy=0;

for $qqq (@dir){
opendir FF, $qqq;
while ($zz=readdir FF) {
if (length($zz)>2) {
$aa=$zz=~m/\./;
if ($aa==1) {@file[$xy]="$qqq/$zz";$xy++;} }
closedir dir;}
};
for $wer (@file){print "$wer\n"};# убери в начале решетку если хочешь чтобы выводились найденные
# файлы

######## функция выдирания из найденных фалов e-mail адресов

open mail,">new-mail.txt";

for $syka (@file){
open piska, "<$syka";
while ($zzaa=<piska>)
{if ($zzaa =~m/\b([\w\d]+\@[\w\d]+\.[\w\d\.]+)\b/g) { $list{"$1"}="";}}}



$,="\n";
print mail keys %list;
close mail;

C!klodoL
02.09.2007, 02:19
мыло отделено от остального хтмл пробелами или <, если оно там еще чем то может быть отделено, то этот символ надо вставить в [ |>] через |
#!/usr/bin/perl

open (html, '<file.txt');
open (mila, '>mila.txt');
while (<html>) {
if ($_ =~ /[ |>](.+@.+.\w+)[ |<]/gi) {
print mila "$1\n";
}
}
close html;
close mila;

ant0ha
02.09.2007, 10:02
тоже довольнотаки часто встречается:

&nbsp;mail@site.ru&nbsp;

C!klodoL
02.09.2007, 10:55
файл на входе:
&nbsp;mail@site.ru&nbsp;
<mm>billi-huilli@microsoft.com<mm>
rere milo@mail.com rere

скрипт:
#!/usr/bin/perl

open (html, '<file.txt');
open (mila, '>mila.txt');
while (<html>) {
if ($_ =~ /[ |>|;](.+@.+.\w+)[ |<|&]/gi) {
print mila "$1\n";
}
}
close html;
close mila;

на выходе:
mail@site.ru
billi-huilli@microsoft.com
milo@mail.com

Ch3ck
02.09.2007, 15:28
Чё думать... регулярка

preg_match("|[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,6}|i", $email, $out);
echo $out[0];

работает во всех случаях...