import urllib2 import sys, csv from bs4 import BeautifulSoup # Abre un csv de escritura para volcar los datos f = open('embalses.csv','w') writer = csv.writer(f) # Vamos a iterar desde 1 hasta 1226 for n in range(1,1227): #for n in range(1,30): # Descarga el html de la web de SEPREM url = 'http://www.seprem.es/ficha.php?idpresa='+str(n) html = urllib2.urlopen(url).read() soup = BeautifulSoup(html,'lxml') # Extrae la tabla "ftable" del html trs = soup.find("table", attrs={"id": "fpresa"}).findAll("tr") # Extrae los datos de los td y los introduce en dos listas names = [] datas = [] # Tenemos en cuenta las dos columnas de datos cta = 0 for tr in trs: tds = tr.findAll("td") if len(tds) < 4: continue cta += 1 name = tds[0].text.strip() data = tds[1].text.strip() if name: if cta == 11: # separamos coordenadas en X e Y if n == 1: names.append("X utm 30") names.append("Y utm 30") xy = data.split(" - ") datas.append(xy[0]) datas.append(xy[1]) else: if n == 1: names.append(name) datas.append(data) for tr in trs: tds = tr.findAll("td") if len(tds) < 4: continue cta += 1 name = tds[2].text.strip() data = tds[3].text.strip() if name: if n == 1: names.append(name) datas.append(data) # Escribimos encabezados if n == 1: writer.writerow([unicode(s).encode("utf-8") for s in names]) # Escribimos datos writer.writerow([unicode(s).encode("utf-8") for s in datas]) print " ".join(datas) # Cerramos embalses.csv f.close()