Buscando autos con python y chileautos
Un compañero de trabajo paul beltran anda en búsqueda de un toyota yaris, pero como muchos saben este es un auto muy cotizado, y cuando llega a llamar ya el auto se vendió
.
Yo le dije que usara buskautos , ya que ellos por cada publicación de autos, envían un tweet a todos sus seguidores en twitter.
Por ultimo me parecido bastante interesante, tratar de hacer una aplicación que busque autos en la pagina de chileautos y encontrar las publicaciones nuevas. esto se puede hacer, por que los parámetros de búsqueda en su sitio son pasados por las urls.
Bueno aquí el buscador.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## | |
## python buscador.py | |
## | |
import urllib, os, re, getpass, smtplib | |
from email.mime.image import MIMEImage | |
from email.mime.multipart import MIMEMultipart | |
from email.mime.text import MIMEText | |
from email.utils import COMMASPACE | |
import os.path | |
current_path = "/buscardorDeAutos/yaris" | |
xml_dir = current_path + "\\xmlFiles\\" | |
URL = "http://www2.chileautos.cl/cemagic.asp?pag=1&dea=50&sort=vcrec&ciudad=37&tipo=TODOS&modelo=yaris&ai=1928&af=2011&pi=4000000&pf=5000000&disp=1&formulario=Busqueda_Avanzada"; | |
mail_to = ['vhspiceros@gmail.com','paulbeltran@gmail.com'] | |
mail_subject = '[toyota Yaris] Nueva publicacion en chileautos!!' | |
def create_ditectory(): | |
if os.path.isdir(xml_dir) == False: | |
os.mkdir(xml_dir) | |
def save_url(filename): | |
os.chdir(xml_dir) | |
dirs = os.listdir(xml_dir) | |
urllib.urlretrieve(URL,filename) | |
def get_content_file(filename): | |
try: | |
f = open(filename, "r") | |
content = f.read() | |
f.close() | |
return content | |
except: | |
return "" | |
def filter_content(filename): | |
content = get_content_file(filename) | |
beginWord = "<table align='center' border=1 class=\"tbl_Principal\">" | |
endWord = "<div class='prevnextlinks'>" | |
content = content[content.find(beginWord):len(content)] ##sacamos el inicio del documento | |
content = content[0:content.find(endWord)] | |
return content | |
def save_file(filename,content): | |
f = open(filename, "w") | |
f.write(content) | |
f.close() | |
def path_Filename(): | |
dirs = os.listdir(xml_dir) | |
return xml_dir + str(len(dirs))+'.html' | |
def path_previus_Filename(): | |
dirs = os.listdir(xml_dir) | |
return xml_dir + str(len(dirs)-1)+'.html' | |
def get_id_cars(content): | |
# TODO: hacer que traiga el precio, para ver variaciones de precio. | |
return re.findall("codauto\x3D([0-9]*)",content) | |
def get_diferences(previus,actual): | |
dif = [] | |
for x in actual: | |
if x not in previus: | |
dif.append(x) | |
return dif | |
def send_mail(diff): | |
sender = smtplib.SMTP('smtp.gmail.com') | |
sender.ehlo() | |
sender.starttls() | |
usuario_gmail = 'vhspiceros' | |
sender.login(usuario_gmail, "******") | |
msg = MIMEMultipart() | |
msg['Subject'] = mail_subject | |
msg['From'] = "vhspiceros@gmail.com" | |
msg['To'] = COMMASPACE.join(mail_to) | |
list = ["http://www3.chileautos.cl/auto.asp?codauto=" + x for x in diff] | |
body = "< br />".join(list) | |
part1 = MIMEText(body, 'html') | |
msg.attach(part1) | |
sender.sendmail(msg['From'], msg['To'],msg.as_string() ) | |
sender.close() | |
def main(): | |
create_ditectory() | |
filename = path_Filename() | |
previus_Filename = path_previus_Filename() | |
save_url(filename) | |
content = filter_content(filename) | |
save_file(filename,content) | |
previus_content = get_content_file(previus_Filename); | |
previues_cars = get_id_cars(previus_content) | |
actual_cars = get_id_cars(content) | |
dif = get_diferences(previues_cars,actual_cars) | |
if len(dif) > 0: | |
send_mail(dif) | |
if __name__ == "__main__": | |
main() |
Ahora mi amigo Paul, podrá ser uno de los primeros en enterarse cuando se publique un nuevo auto :D.
--
Atte.
Víctor Hugo Saavedra
http://vhspiceros.blogspot.com
jajaja La necesidad hace al Maestro jajaj
ResponderEliminarMuy buena idea y muy buen script
Kudos!!!!
Y no sería más rápido usando BeautifulSoup???
ResponderEliminar