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

Discussion in 'PHP' started by Lancellot, 1 Sep 2007.

  1. Lancellot

    Lancellot Member

    Joined:
    9 Aug 2006
    Messages:
    138
    Likes Received:
    23
    Reputations:
    7
    ку
    встеретился с такй проблемой, есть тхт файл в нём станицы в которых мыла .не подскажете скрипт желательно на перле для отсеивания мыл с страниц типа парсера,может я не внимательно искал но вроди не нашол на форуме)
    спс
     
  2. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    1 person likes this.
  3. Lancellot

    Lancellot Member

    Joined:
    9 Aug 2006
    Messages:
    138
    Likes Received:
    23
    Reputations:
    7
    что-то невразумительное ))
    а по просче есть?хотя идея ясна
     
  4. n1†R0x

    n1†R0x Elder - Старейшина

    Joined:
    20 Jan 2007
    Messages:
    728
    Likes Received:
    376
    Reputations:
    235
    Написал небольшой скрипт, по-прежнему не работает с двойными доменами (user@company.net.ua), но с обычными вроде норм, протестируйте плз)

    PHP:
    <?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++;
            }
        }
    ?>
     
    1 person likes this.
  5. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,362
    Likes Received:
    1,157
    Reputations:
    430
    Дети мои...
    PHP:
    preg_match("|[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,6}|i"$email$out);
      echo 
    $out[0];
     
  6. ant0ha

    ant0ha Elder - Старейшина

    Joined:
    22 May 2007
    Messages:
    130
    Likes Received:
    50
    Reputations:
    13
    эффективнее же искать до первого пробела или переноса строки до и после собаки, и тогда не будет проблем с двойными и более доменами :)
     
  7. n1†R0x

    n1†R0x Elder - Старейшина

    Joined:
    20 Jan 2007
    Messages:
    728
    Likes Received:
    376
    Reputations:
    235
    тоже не лучший вариант)
    представь себе, что мыла, предположим, в таком формате:

    PHP:
    <a href='mailto:blablabla'>email</a><br>
    у меня в мыслях только 2 варианта: чтение до символа, не входящего в диапазон буквы_цифры, либо чтение до последней точки.. как реализовать второе - не знаю :(
     
  8. Underwit

    Underwit Banned

    Joined:
    6 Oct 2006
    Messages:
    191
    Likes Received:
    137
    Reputations:
    16
    вот тут глянь /showpost.php?p=290912&postcount=44

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

    PHP:
    #!/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;
     
  9. C!klodoL

    C!klodoL Elder - Старейшина

    Joined:
    5 Jun 2007
    Messages:
    302
    Likes Received:
    208
    Reputations:
    4
    мыло отделено от остального хтмл пробелами или <, если оно там еще чем то может быть отделено, то этот символ надо вставить в [ |>] через |
    #!/usr/bin/perl

    open (html, '<file.txt');
    open (mila, '>mila.txt');
    while (<html>) {
    if ($_ =~ /[ |>](.+@.+.\w+)[ |<]/gi) {
    print mila "$1\n";
    }
    }
    close html;
    close mila;
     
    #9 C!klodoL, 2 Sep 2007
    Last edited: 2 Sep 2007
  10. ant0ha

    ant0ha Elder - Старейшина

    Joined:
    22 May 2007
    Messages:
    130
    Likes Received:
    50
    Reputations:
    13
    тоже довольнотаки часто встречается:

    &nbsp;mail@site.ru&nbsp;
     
  11. C!klodoL

    C!klodoL Elder - Старейшина

    Joined:
    5 Jun 2007
    Messages:
    302
    Likes Received:
    208
    Reputations:
    4
    файл на входе:
    &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
     
    2 people like this.
  12. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,362
    Likes Received:
    1,157
    Reputations:
    430
    Чё думать... регулярка
    PHP:
    preg_match("|[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,6}|i"$email$out);
      echo 
    $out[0]; 
    работает во всех случаях...