在遍历列表的维基百科页面中查找坐标



这可能是一个简单的问题,但我在for循环中的经验非常有限。

我试图调整此页面中的解决方案https://www.mediawiki.org/wiki/API:Geosearch我举了一些简单的例子,但结果并不是我所期望的。

例如:

我有一个简单的数据框架:

df= pd.DataFrame({'City':['Sesimbra','Ciudad Juárez','31100 Treviso','Ramada Portugal','Olhão'],
'Country':['Portugal','México','Itália','Portugal','Portugal']})

我创建了一个基于城市的列表:

lista_cidades = list(df['City'])

我想迭代这个列表来获得坐标(最好是十进制(

到目前为止,我尝试了这种方法:

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

但看起来代码不会在列表上迭代,并且总是返回相同的坐标

例如,当我用纬度坐标调用字典时,这就是我得到的

lng_dict

{'Sesimbra': '-7.84166667',
'Ciudad Juárez': '-7.84166667',
'31100 Treviso': '-7.84166667',
'Ramada Portugal': '-7.84166667',
'Olhão': '-7.84166667'}

我该怎么办才能解决这个问题?

提前感谢

我认为查询只返回一个结果,它只会从您的列表中获取最后一个城市(在您的cas中为"Olhão"坐标(。

您可以通过记录DATA内容进行检查。

我不知道wikipedia API,但要么你的调用缺少参数(文档应该给你信息(,要么你必须为每个城市调用API,比如:

import pandas as pd
import requests
df = pd.DataFrame({'City': ['Sesimbra', 'Ciudad Juárez', '31100 Treviso', 'Ramada Portugal', 'Olhão'],
'Country': ['Portugal', 'México', 'Itália', 'Portugal', 'Portugal']})
lista_cidades = list(df['City'])
lng_dict = {}
lat_dict = {}
S = requests.Session()
URL = "https://en.wikipedia.org/w/api.php"
for city in lista_cidades:
PARAMS = {
"action": "query",
"format": "json",
"titles": city,
"prop": "coordinates"
}
R = S.get(url=URL, params=PARAMS)
DATA = R.json()
PAGES = DATA['query']['pages']
for k, v in PAGES.items():
try:
lat_dict[city] = str(v['coordinates'][0]['lat'])
lng_dict[city] = str(v['coordinates'][0]['lon'])
except:
pass

最新更新