Come programmare un Spider-mail in Python

January 14

I motori di ricerca spesso utilizzano algoritmi che prendono le informazioni da pagine Web e classificarli in base alla popolarità. Questi algoritmi sono spesso chiamati "ragni". Un programmatore Python può imparare molto sulla programmazione multithread, regolare pattern matching espressione e dati Web che vanno a prendere con la creazione di un ragno. È possibile avviare uno script Python ragno con poco più di librerie Python inclusi e interprete.

istruzione

1 Definire due espressioni regolari per abbinare indirizzi e-mail e collegamenti ipertestuali nel codice della pagina web:

importazione urllib
import threading
importazione re

r = re.compile ( '(? <= href \ = \ "mailto

:).? @.?. [\ w] {0,3} (? = \")') # Mails
r1 = re.compile ( '(? <= href \ = \ "). *? (? = \")') # Link

2 Definire un costruttore di classe che prende un URL della pagina Web come argomento. Il costruttore prenderà l'URL come punto di partenza, quindi iniziare la classe "Spider" come un thread separato:

Classe Spider (threading.Thread):

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

3 Definire il metodo di "run", che esegue ogni volta che inizia un nuovo thread di tipo "ragno". Questo metodo elabora la pagina Web con "urllib.urlopen", tira le email dal codice utilizzando la "r" espressioni regolari e li memorizza in un file di log. Prende poi i collegamenti ipertestuali e scarica le informazioni da questo URL, iniziando un nuovo thread per elaborare la pagina web:

run DEF (auto):

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-]+@([0-9a-z][0-9a-z-]+.)+[az]{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 Eseguire la classe Spider chiamando un nuovo thread di tipo "ragno" e fornendo con un URL:

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

Consigli e avvertenze

  • Questo esempio è solo a scopo di studio / educativo, come dimostrazioni di pattern matching, filettatura e funzionalità Web del linguaggio Python.