from pyquery import PyQuery
def parse_telegrama(url):
pq = PyQuery(url)
resultado_mesa = {}
for tr in pq('.tablon tbody tr, .TVOTOS tbody tr'):
resultado_mesa[pq('th', tr).text()] = int(pq('td', tr).text().replace('.', ''))
return resultado_mesa
escrutinio = parse_telegrama('http://www.resultados.gob.ar/telegramas/04/001/0013J/040010013J2669.htm')
escrutinio
sum(escrutinio.values())
def crawl(base_url):
"""
Devuelve un arbol con los resultados de cada mesa
Puede tardar mucho.
>>> crawl("http://www.resultados.gob.ar/telegramas/IMUN04.htm")
"""
arbol = {}
pq = PyQuery(base_url)
pq = pq.make_links_absolute(base_url='http://www.resultados.gob.ar/telegramas/')
for anchor in pq('a'):
url = pq(anchor).attr('href')
if '04/' in url:
# mesa
data = parse_telegrama(url)
else:
# abrir nueva rama
data = crawl(url)
arbol[pq(anchor).text()] = data
return arbol
%install_ext https://gist.github.com/mgaitan/7207448/raw/ce87e68226ef4ad12cb1aabfa42ebacaf66b3bce/django_orm_magic.py
%load_ext django_orm_magic
%%django_orm
from django.db import models
from django.db.models import Sum
class Municipio(models.Model):
nombre = models.CharField(max_length=100)
def __unicode__(self):
return self.nombre
class Circuito(models.Model):
numero = models.CharField(max_length=100)
municipio = models.ForeignKey('Municipio', null=True)
def __unicode__(self):
return u"Circuito %s (%s)" % (self.numero, self.municipio)
class Mesa(models.Model):
circuito = models.ForeignKey('Circuito', null=True)
numero = models.CharField(max_length=100, unique=True)
url = models.URLField()
@property
def computados(self):
return self.votomesa_set.aggregate(Sum('votos'))['votos__sum']
def __unicode__(self):
return u"Mesa %s (%s)" % (self.numero, self.circuito)
class Opcion(models.Model):
# partido, blanco, etc.
nombre = models.CharField(max_length=100, unique=True)
def __unicode__(self):
return self.nombre
class VotoMesa(models.Model):
mesa = models.ForeignKey('Mesa')
opcion = models.ForeignKey('Opcion')
votos = models.IntegerField()
def __unicode__(self):
return u"%s: %d" % (self.opcion, self.votos)
class Meta:
unique_together = ('mesa', 'opcion')
def crawl2(base_url, nivel='prov', parent=None):
pq = PyQuery(base_url)
pq = pq.make_links_absolute(base_url='http://www.resultados.gob.ar/telegramas/')
for anchor in pq('a'):
url = pq(anchor).attr('href')
text = pq(anchor).text()
if nivel == 'circuito':
# mesa
mesa = Mesa.objects.create(numero=text, circuito=parent, url=url)
for opcion, votos in parse_telegrama(url).iteritems():
opcion, _ = Opcion.objects.get_or_create(nombre=opcion)
VotoMesa.objects.create(mesa=mesa, opcion=opcion, votos=votos)
elif nivel == 'prov':
municipio, _ = Municipio.objects.get_or_create(nombre=text)
crawl2(url, nivel="muni", parent=municipio)
elif nivel == 'muni':
circuito, _ = Circuito.objects.get_or_create(numero=text, municipio=parent)
crawl2(url, nivel="circuito", parent=circuito)
# 024 - Totoral
crawl2('http://www.resultados.gob.ar/telegramas/ICIR04024.htm', 'muni')
Mesa.objects.all()
Opcion.objects.all()
Fit = Opcion.objects.get(nombre='FRENTE DE IZQUIERDA Y DE LOS TRABAJADORES')
VotoMesa.objects.filter(opcion=Fit).aggregate(Sum('votos'))
from IPython.display import display_html, HTML, IFrame
for mesa in Mesa.objects.filter(votomesa__votos=0, votomesa__opcion=Fit):
display_html(HTML("%s - Total computados: %d" % (mesa.url, mesa, mesa.computados)))
IFrame(src=Mesa.objects.get(numero__contains='7634').url, width="100%", height=300)
# datos de todo cordoba. Puede tardar
crawl2('http://www.resultados.gob.ar/telegramas/IMUN04.htm')
Circuito.objects.all().count()
from django.db import connections, connection
connections.databases
ls db.sqlite
!nautilus .
Mesa.objects.count()
for mesa in Mesa.objects.filter(votomesa__votos=0, votomesa__opcion=Fit):
display_html(HTML("%s - Total computados: %d" % (mesa.url, mesa, mesa.computados)))