Skip to content

Instantly share code, notes, and snippets.

@dexafree
Created May 24, 2014 13:29
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dexafree/c65e611b2932f776d154 to your computer and use it in GitHub Desktop.
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
# -*- 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