1. #1
    Avatar von Snees
    Registriert seit
    18.11.2011
    Beiträge
    1.001
    Thanked 590 Times in 319 Posts

    Standard [Source] eMailCrawler

    Guten Morgen, ist eben aus Langeweile entstanden, vielleicht kann jemand eine Menge eMail-Adressen gebrauchen

    C# Code:
    Code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.IO;
    using System.Net;
    
    namespace eMailCrawler
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.Title = "eMailCrawler";
                Console.WriteLine("Bei welcher PLZ beginnen? (Empfohlen: 11111)");
                int start = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Bei welcher PLZ aufhören? (Empfohlen: 99999)");
                int stop = Convert.ToInt32(Console.ReadLine());
                Crawl(start, stop);
                Console.WriteLine("Done.");
                Console.ReadLine();
            }
    
            static void Crawl(int start, int stop)
            {
                for (int i = start; i <= stop; i++)
                {
                    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.email-verzeichnis.de/email/search.php");
    
                    httpWebRequest.Method = "POST";
                    httpWebRequest.MediaType = "HTTP/1.1";
                    httpWebRequest.ContentType = "application/x-www-form-urlencoded";
                    httpWebRequest.UserAgent = "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1";
    
                    byte[] byteArrayData = Encoding.ASCII.GetBytes("begin=0&name=&plz=51545&ort=&land=Worldwide&submit.x=85&submit.y=31");
                    httpWebRequest.ContentLength = byteArrayData.Length;
    
                    Stream dataStream = httpWebRequest.GetRequestStream();
                    dataStream.Write(byteArrayData, 0, byteArrayData.Length);
                    dataStream.Close();
    
                    HttpWebResponse httpWebesponse = (HttpWebResponse)httpWebRequest.GetResponse();
    
                    dataStream = httpWebesponse.GetResponseStream();
                    StreamReader streamreader = new StreamReader(dataStream, Encoding.UTF8);
                    string response = streamreader.ReadToEnd();
                    streamreader.Close();
    
                    Regex rx = new Regex("&amp;name=(.+)\"><img height=");
    
                    MatchCollection matches = rx.Matches(response);
    
                    foreach (Match match in matches)
                    {
                        String newMatch = Convert.ToString(match);
                        String matsche = newMatch.Replace("&amp;name=", "").Replace("\"><img height=", "");
                        Console.WriteLine(matsche);
                        WebClient c = new WebClient();
                        c.DownloadString("http://localhost/email/index.php?adr=" + matsche);
                    }
                }
            }
        }
    }
    PHP-Script:
    PHP-Code:
    <?php
    $con 
    mysql_connect("localhost","root","") or die(mysql_error());
    mysql_select_db("email") or die(mysql_error());
    $adr $_GET["adr"];
    $q mysql_query("INSERT INTO mylist (email) VALUES ('$adr')") or die(mysql_error());
    ?>
    Tabelle:
    Code:
    -- phpMyAdmin SQL Dump
    -- version 3.5.2
    -- http://www.phpmyadmin.net
    --
    -- Host: localhost
    -- Generation Time: Aug 11, 2012 at 11:27 AM
    -- Server version: 5.5.25a
    -- PHP Version: 5.4.4
    
    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";
    
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    
    --
    -- Database: `email`
    --
    
    -- --------------------------------------------------------
    
    --
    -- Table structure for table `mylist`
    --
    
    CREATE TABLE IF NOT EXISTS `mylist` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `email` varchar(150) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `email` (`email`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=94 ;
    
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    Man kann die Einträge auch in einer Textdatei speichern, was deutlich schneller gehen würde, ich wollte es aber so machen

    PS: Pattern sind der letzte Schrott, war aber definitiv zu faul
    Geändert von Snees (11.08.2012 um 11:58 Uhr)

  2. #2
    Gelöschter Benutzer
    Gast

    Standard AW: [Source] eMailCrawler

    Dass du immer PHP und C# vermischt ist total gay, nutze doch einfach SQLite wenn die Datenbank sowieso Lokal ist.

  3. #3
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    6.142
    Thanked 9.130 Times in 3.005 Posts
    Blog Entries
    5

    Standard AW: [Source] eMailCrawler

    Das Ding macht nix anderes als die erste Ergebnisseite zur PLZ 51545 so oft aufzurufen, wie der PLZ-Bereich voneinander abweicht, also in der Form kein Crawler und somit ziemlich nutzlos.
    Wäre wesentlich sinnvoller wenn ein PLZ-Bereich tatsächlich durchgearbeitet wird und dabei die eMail-Adressen von allen Ergebnisseiten gecrawled werden.

    [highlight=csharp]
    foreach (Match match in matches) {
    String newMatch = Convert.ToString(match);
    String matsche = newMatch.Replace("&amp;name=", "").Replace("\"><img height=", "");
    Console.WriteLine(matsche);
    WebClient c = new WebClient();
    c.DownloadString("http://localhost/email/index.php?adr=" + matsche);
    }
    [/highlight]

    Mal abgesehen davon, dass es wesentlich effektivere Methoden gibt von C# aus MySQL-Datenbanken zu nutzen, wenns denn unbedingt sein muss (hätte da ne Datei eh vorgezogen), ist das performancetechnisch eine reine Katastrophe.
    Deine MatchCollection beinhaltet bei dir 20 Elemente, im Normalfall natürlich mehr.
    Für jedes Element wird eine neue WebClient instanz erstellt und ein Request gesendet - wtf?
    Warum nicht eine Instanz für die Schleife verwenden und alle Daten auf einmal senden? Schon ist dieser Teil des Programms um 1900% performanter..

    [highlight=csharp]
    byte[] byteArrayData = Encoding.ASCII.GetBytes("begin=0&name=&plz=51545&o rt=&land=Worldwide&submit.x=85&submit.y=31");
    [...]
    StreamReader streamreader = new StreamReader(dataStream, Encoding.UTF8);
    [/highlight]

    Aha, vom Client zum Server wird also ASCII-Kodiert, und zwischendrin wird das ganze dann nochmal umconvertiert, damit der Server UTF8-Kodiert antworten kann, interessant..
    So einen Server hab ich bisher auch noch nie gesehen, dem muss ja echt extrem langweilig sein wenn der nix besseres zutun hat xD
    Kleiner Tipp: Keine fertigen Snippets kopieren, wenn man nicht weiß was sie tun

    [highlight=csharp]
    httpWebRequest.UserAgent = "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1";
    [/highlight]

    Komplett invalid, UserAgent ist eine EIGENSCHAFT!
    Wenn du alles direkt über Sockets sendest, musst du dir den Header nach dem Schema selbst zusammenbasteln.
    Um dir da soviel Arbeit wie möglich abzunehmen, hat die HttpWebRequest-Klasse dafür Eigenschaften, um eben genau das zu vermeiden.

    Zitat Zitat von Nico Beitrag anzeigen
    PS: Pattern sind der letzte Schrott, war aber definitiv zu faul
    Man murkst also beim Pattern, damit man den ganzen Mist auf den das Pattern matcht aber nicht soll später alles von Hand entfernen darf, Interessante Logik.
    Mit minimalen Änderungen im Pattern hättest du dir so crap wie

    [highlight=csharp]
    String matsche = newMatch.Replace("&amp;name=", "").Replace("\"><img height=", "");
    [/highlight]

    sparen können.
    Ist bei mir definitiv keine Faulheit wenn man an einer Stelle murkst, um dafür an einer anderen 10x soviel Arbeit extra zu bekommen.
    Ich an deiner Stelle würde schnell mal Reguläre Ausdrücke lernen, oder alternativ entsprechende Generatoren benutzen, wobei ich ersteres bevorzugen würde.

    Hier gibts auf jeden Fall eine Menge Nachbesserungsbedarf.


  4. The Following 2 Users Say Thank You to DMW007 For This Useful Post:

    Minecraft (13.08.2012), Snees (11.08.2012)

Ähnliche Themen

  1. [CS:Source] Lags
    Von exception im Forum Counter Strike
    Antworten: 0
    Letzter Beitrag: 09.10.2013, 12:37
  2. EMS - Source
    Von Snees im Forum Sourcecode
    Antworten: 2
    Letzter Beitrag: 16.04.2012, 18:47
  3. AuthMe [Source]
    Von Snees im Forum PHP
    Antworten: 2
    Letzter Beitrag: 02.04.2012, 13:46
  4. [VB] Hilfe source
    Von Sploxfreak im Forum Sourcecode
    Antworten: 5
    Letzter Beitrag: 13.02.2012, 21:45
  5. [VB.Net-Source] GetIP
    Von ewfijwef im Forum .Net
    Antworten: 3
    Letzter Beitrag: 25.04.2011, 12:52
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.