Thema: [Source] eMailCrawler
-
11.08.2012, 11:30 #1
[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("&name=(.+)\"><img height="); MatchCollection matches = rx.Matches(response); foreach (Match match in matches) { String newMatch = Convert.ToString(match); String matsche = newMatch.Replace("&name=", "").Replace("\"><img height=", ""); Console.WriteLine(matsche); WebClient c = new WebClient(); c.DownloadString("http://localhost/email/index.php?adr=" + matsche); } } } } }
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());
?>
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 */;
PS: Pattern sind der letzte Schrott, war aber definitiv zu faulGeändert von Snees (11.08.2012 um 11:58 Uhr)
-
11.08.2012, 16:49 #2Gelöschter BenutzerGast
AW: [Source] eMailCrawler
Dass du immer PHP und C# vermischt ist total gay, nutze doch einfach SQLite wenn die Datenbank sowieso Lokal ist.
-
11.08.2012, 17:17 #3
- Registriert seit
- 15.11.2011
- Beiträge
- 6.408
- Blog Entries
- 5
Thanked 9.168 Times in 3.038 PostsAW: [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("&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.
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("&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.
-
The Following 2 Users Say Thank You to DMW007 For This Useful Post:
Ähnliche Themen
-
[CS:Source] Lags
Von exception im Forum Counter StrikeAntworten: 0Letzter Beitrag: 09.10.2013, 12:37 -
EMS - Source
Von Snees im Forum SourcecodeAntworten: 2Letzter Beitrag: 16.04.2012, 18:47 -
AuthMe [Source]
Von Snees im Forum PHPAntworten: 2Letzter Beitrag: 02.04.2012, 13:46 -
[VB] Hilfe source
Von Sploxfreak im Forum SourcecodeAntworten: 5Letzter Beitrag: 13.02.2012, 21:45 -
[VB.Net-Source] GetIP
Von ewfijwef im Forum .NetAntworten: 3Letzter Beitrag: 25.04.2011, 12:52
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.