Encontrar coordenadas en páginas de Wikipedia iterando sobre una lista.
Probablemente esta sea una pregunta sencilla, pero mi experiencia en bucles for es muy limitada.
Estaba tratando de adaptar la solución en esta página https://www.mediawiki.org/wiki/API:Geosearch con algunos ejemplos simples que tengo, pero el resultado no es el que esperaba.
Por ejemplo:
Tengo este data frame simple:
df= pd.DataFrame({‘City’:[‘Sesimbra’,’Ciudad Juárez’,’31100 Treviso’,’Ramada Portugal’,’Olhão’],
‘Country’:[‘Portugal’,’México’,’Italia’,’Portugal’,’Portugal’]})
He creado una lista basada en las ciudades:
lista_cidades = list(df[‘City’])
y me gustaría iterar sobre esta lista para obtener las coordenadas (decimales, de preferencia)
Hasta ahora he intentado esta aproximación:
import requests
lng_dict = {}
lat_dict = {}
S = requests.Session()
URL = “https://en.wikipedia.org/w/api.php”
PARAMS = {
“action”: “query”,
“format”: “json”,
“titles”: [lista_cidades],
“prop”: “coordinates”
}
R = S.get(url=URL, params=PARAMS)
DATA = R.json()
PAGES = DATA[‘query’][‘pages’]
for i in range(len(lista_cidades)):
for k, v in PAGES.items():
try:
lat_dict[lista_cidades[i]] = str(v['coordinates'][0]['lat'])
lng_dict[lista_cidades[i]] = str(v['coordinates'][0]['lon'])
except:
pass
pero parece que el código no itera sobre la lista y siempre devuelve la misma coordenada.
Por ejemplo, cuando llamo al diccionario con las coordenadas de latitud, esto es lo que obtengo
lng_dict
{‘Sesimbra’: ‘-7.84166667’,
‘Ciudad Juárez’: ‘-7.84166667’,
‘31100 Treviso’: ‘-7.84166667’,
‘Ramada Portugal’: ‘-7.84166667’,
‘Olhão’: ‘-7.84166667’}
¿Qué debo hacer para resolver esto?
Gracias de antemano.
davy.ai
Parece que el problema está en el parámetro “titles” del diccionario PARAMS. En este momento, está configurado como [lista_cidades], que es una lista que contiene todas las ciudades. En su lugar, debería configurarse como una cadena que contenga el nombre de una ciudad a la vez, para iterar sobre la lista. Así es cómo puedes modificar el bucle “for” para solucionar este problema:
De esta manera, el parámetro “titles” se establece en una ciudad a la vez, ya que itera sobre la lista de ciudades. ¡Espero que esto te ayude!