Wie man ein E-Mail-Spider in Python programmiert

August 18

Suchmaschinen oft Verwendung-Algorithmen, die Informationen aus Webseiten und ordnen Sie sie nach Beliebtheit. Diese Algorithmen werden oft genannt "Spinnen." Ein Python-Programmierer erfahren viel über die Multithreadprogrammierung, regulären Ausdrücken und Web Daten abrufen, indem Sie erstellen eine Spinne. Sie können ein Python-Skript Spinne mit wenig mehr als die mitgelieferten Python Libraries und Interpreter starten.

Anweisungen

1 Definieren Sie zwei reguläre Ausdrücke, um e-Mail-Adressen und Hyperlinks im Code der Webseite entsprechen:

Urllib importierenImportieren von threadingwieder importieren

R = re.compile ('(?<=href\=\"mailto:).? @.?. [\w] {0,3} (? = \ ")') # MailsR1 = re.compile ('(? < = href\=\").*? (? = \ ")') # Links

2 Definieren Sie den Konstruktor einer Klasse, der eine Webseite-URL als Argument annimmt. Der Konstruktor wird die URL als Ausgangspunkt zu nehmen, dann beginnen die "Spider"-Klasse als einen separaten Thread:

Klasse Spider (einfädeln. Thread):

def __init__(self,address): self.url = address threading.Thread.__init__ ( self )3

Definieren Sie die "ausführen"-Methode, die immer einen neuen Thread vom Typ, die führt "Spider" beginnt. Diese Methode verarbeitet die Web-Seite mit "urllib.urlopen", zieht e-Mails aus dem Code mithilfe des regulären Ausdrucks "R" und speichert diese in einer Log-Datei. Dann nimmt die Hyperlinks und lädt die Informationen von dieser URL starten einen neuen Thread um diese Web-Seite zu verarbeiten:

DEF run(self):

source = urllib.urlopen(self.url).read() mails = r.findall(source) mails = list(set(mails)) log = open('log.txt','a') for i in mails: if re.match(&quot;^[_.0-9a-z-][email protected]([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$&quot;, i) != None: if (i+'\n') not in (open('log.txt','r').readlines()): print 'Saved: ',i log.write(i+'\n') count += 1 log.close() urls = r1.findall(source) for url in urls: Crawl(url).start()4

Führen Sie die Spider-Klasse durch Aufruf eines neuen Threads vom Typ "Spider" und deren Bereitstellung mit einem URL aus:

Spider('www.Google.com').Start()

Tipps & Warnungen

  • Dieses Beispiel ist nur, zu akademischen/pädagogischen Zwecken als Demonstrationen Mustervergleich, threading und Web-Funktionen der Sprache Python.