Created
May 24, 2014 13:29
-
-
Save dexafree/c65e611b2932f776d154 to your computer and use it in GitHub Desktop.
Script utilizado para descargar las coordenadas de todas las paradas de FGC y añadirlas a una base de datos SQLite. Extrae los datos en un archivo llamado SQL.txt
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
# -*- coding: utf-8 -*- | |
import urllib2 | |
from bs4 import BeautifulSoup | |
# Array de todas las lineas de FGC | |
linies = ['l6', 'l7', 's1', 's2', 's5', 's55', 's8', 's33', 's4', 's8', 'r5', 'r50', 'r6', 'r60'] | |
# Creamos el opener y le añadimos los headers | |
opener = urllib2.build_opener() | |
opener.addheaders = [('User-agent', 'Mozilla/5.0')] | |
# Declaramos los arrays en los que almacenaremos los resultados | |
arrayNoms = [] | |
arrayX = [] | |
arrayY = [] | |
# Iniciamos el for que se recorrera todas las lineas | |
numLinia=0 | |
for linia in linies: | |
# Cargamos el contenido de la web correspondiente a la linea en la que estamos | |
response = opener.open('http://www.fgc.cat/mobil/linia.php?linia='+linies[numLinia]) | |
# Leemos el contenido y lo cargamos en BeautifulSoup | |
data = response.read() | |
soup = BeautifulSoup(data) | |
# Cogemos los nombres de las paradas, situados en div con la clase .nomEstacio | |
for nom in soup.select('.nomEstacio'): | |
# Metemos el nombre de la parada en el array correspondiente | |
arrayNoms.append(nom.string) | |
# Cogemos los elementos situados dentro del div con la clase .iconosEstacio | |
for coord in soup.select('.iconosEstacio'): | |
# Seleccionamos el elemento a, que es el correspondiente al icono de Google | |
google = coord.find('a') | |
# Obtenemos el href | |
hrefs = google['href'] | |
# Separamos el href por el simbolo de igual, ya que solo nos interesan las coordenadas | |
coords = hrefs.split('=') | |
# Separamos las coordenadas por una , para poder tener diferenciadas las latitudes de las longitudes | |
coordsSplitted = coords[1].split(',') | |
# Metemos cada una en su array correspondiente | |
arrayX.append(coordsSplitted[0]) | |
arrayY.append(coordsSplitted[1]) | |
#Incrementamos el numero de linea | |
numLinia += 1 | |
# Abrimos el fichero en el cual volcaremos los datos en forma de SQL. | |
# Lo abrimos en modo append | |
f = open('SQL.txt', 'a') | |
# Iniciamos el for que recorrera todos los elementos de los arrays | |
i=0 | |
for nom in arrayNoms: | |
# Creamos la secuencia SQL | |
# NOTA: Al ser una empresa catalana, algunos de los nombres incluyen caracteres extraños como ç o ' de modo que lo codificamos como utf-8 | |
# para evitar problemas al añadirlo al archivo | |
sequence = u''.join('INSERT INTO coordenadas (PARADA, X, Y) VALUES(\"'+arrayNoms[i]+'\", '+arrayX[i]+', '+arrayY[i]+');\n').encode('utf-8') | |
# Añadimos la secuencia SQL al archivo | |
f.write(sequence) | |
i += 1 | |
# Cerramos el fichero | |
f.close() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment