extraer emails con python
3 Abr 2009 | Escrito por: lopz | En: Python
Extraer emails de una página web usando python
Hola
Bueno, mucha gente se pregunta como realizar un spider o crawler para obtener datos de una página web de forma automática y en realidad no es tan difícil, solo bastaría con ir navegando por las urls, pero en este caso mostraremos como obtener cierto tipo de datos que nos interesan de la web, y por ahora mostraremos como extraer los mails de una página web o lo mismo es válido para un fichero de texto donde tengas emails y quieras tenerlos algo mas organizado o hasta en una base de datos.
La idea de este script es solo mostrar con que facilidad se puede hacer esto usando python, no quiero incitar a la gente que haga spam ni nada parecido, tampoco que lo usen para esos fines, y bueno tampoco es que yo sea el primero en postear algo así, y es que hay una cosa, cuando un usuario n00b quiere hacer spam, entonces este buscará un script que lo haga todo completo, y como este no es su fin osea que no le servirá, y si es un usuario avanzado el puede usarlo para estos fines, pero es obvio que el mismo podría hacerse uno en cualquier lenguaje, a su gusto y mucho mejor que este, osea que de cualquier forma no molestará a nadie :D
Code:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#
# PyImg2Text.py
#
# Copyright 2009 Jorge J. Lopez C. <lowlifebob[arroba]gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
import httplib
import re
const_dom = "www.nodo50.org"
const_url = "/cbc/lista.htm"
const_mailsrch = re.compile(r'[w-][w-.]+@[w-][w-.]+[a-zA-Z]{1,4}')
def download(dom, url):
headers = {
"User-Agent": "Mozilla/5.0 (X11; U; Linux i686; es-ES; \
rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3",
"Accept": "text/html,application/xhtml+xml,application/ \
xml;q=0.9,*/*;q=0.8",
"Accept-Language": "es-es,es;q=0.8,en-us;q=0.5,en;q=0.3",
"Accept-Charset": "UTF-8,*",
"Keep-Alive": "300",
"Proxy-Connection": "keep-alive",
}
# conectamos con el servidor
conn = httplib.HTTPConnection(dom, 80)
# hacemos la peticion
conn.request ("GET", url, None, headers)
resp = conn.getresponse()
return resp
def main():
mails = []
db = open('emails.txt', 'a')
xml = download(const_dom, const_url).read()
mails.extend(const_mailsrch.findall(xml))
for mail in mails:
db.write(mail + 'n')
print "Email:", mail
db.close()
if __name__ == '__main__':
main()
Como pueden ver hemos obtenido todos los emails de una página web y guardado en un fichero de texto plano, y como les decía, podíamos hacerlo a una DB, etc
la página que elegí es al azar, osea que no digan que tengo algo contra los dueños de esos emails.
Y como siempre a continuación pongo un SS del script funcionando

PD me olvidaba de algo, aquí uso expresiones regulares para extraer los emails, y es una bien sencilla, funciona como debe ser, pero NO ES CORRECTA, osea pueden haber una y muchas excepciones donde habrá un error al poner un email como válido o inválido, si quieren pueden buscar las regex para validar un email y se asombrarán lo complicado que resulta validarlo.
Saludos!
|