Usuario:Bigsus/Nomenclator/infoRecolector.py

De Wikipedia, la enciclopedia libre
# -*- 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