Usuario:Bigsus/Nomenclator/infoRecolector.py
Apariencia
# -*- coding: utf-8 -*-
"""
Este script se dedica a recolectar datos de internet para actualizar infoboxes
Requiere pywikipedia para su ejecución.
http://www.crummy.com/software/BeautifulSoup/download/BeautifulSoup.py
"""
import os
import codecs
from urllib import urlopen,urlencode
from BeautifulSoup import BeautifulSoup
class LocalidadINE(object):
def __init__(self, datos, soloMunicipios):
if(soloMunicipios):
provinciaX, municipioX = datos
else:
provinciaX, municipioX, localidadX = datos
self.localidadCodigo,self.localidadNombre = localidadX.split('&')
self.provinciaCodigo,self.provinciaNombre = provinciaX.split('&')
self.municipioCodigo,self.municipioNombre = municipioX.split('&')
def asociarPoblacion(self,datosAnos):
self.Anos = datosAnos
class INE(object):
def recolectarLocalidades(self,idProvincia, soloMunicipios, anos):
paramsG = {'accion': 'busquedaAvanzada', 'ordenAnios': 'ASC', 'entidad_amb': 'no', 'poblacion_amb': 'T'}
params = paramsG
params['numPag']= 0
params['comunidad']= '00'
params['codProv']= idProvincia
#params['codMuni']= 71
if(soloMunicipios):
params['entidad_amb']='si' #Si solo se quieren datos totales del municipio
numDatos = 2
else:
params['entidad_amb']='no'
numDatos = 3
print params
tanos=""
for ano in anos:
if(tanos!=""):
tanos+="&"
tanos+="anos=%s" % (ano)
print "http://www.ine.es/nomen2/index.do?"+urlencode(params)+"&"+tanos
html = urlopen("http://www.ine.es/nomen2/index.do",urlencode(params)+"&"+tanos)
soup = BeautifulSoup(html)
print "Cargando localidad . . ."
i=0
tres=[]
localidades=[]
for incident in soup.findAll("td",{"class":"dattab1"}):
if(i==numDatos):
i=1
localidades.append(LocalidadINE(tres,soloMunicipios))
tres=[]
else:
i+=1
tres.append(incident.string.replace("nbsp;","").strip())
# print incident.string.replace("nbsp;","").strip()
print "Cargando datos . . ."
l=0
i=0
datosAnos=[]
datosAno=[]
for incident in soup.findAll("td",{"class":"dattab"}):
if(i!=0 and i%3==0):
datosAno.append(anos[(i/3)-1])
datosAnos.append(datosAno)
datosAno=[]
if(i==len(anos)*3):
i=0
localidades[l].asociarPoblacion(datosAnos)
l+=1
datosAnos=[]
i+=1
datosAno.append(incident.string.strip())
for loc in localidades:
print "%s (%s)" % (loc.municipioNombre,loc.provinciaNombre),loc.Anos
class Listas(object):
def nombresConEnlaces(idProvincia):
localidades='{| {{tablabonita}} class="sortable wikitable"\n! NombreOficialLocalidad\n! Enlace Localidad (Cantabria)\n! TieneInfobox\n'
if __name__ == '__main__':
print "Recolecando datos . . ."
#ine = INE("Usuario:Bigsus/Nomenclator/España/")
ine = INE()
ine.recolectarLocalidades(26,True,[2006,2007]) #La Rioja