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

Find coordinates in wikipedia pages iterating over a list

可能这是个简单的问题,但我对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

但看起来代码没有遍历列表并且总是returns相同的坐标

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

lng_dict



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

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

提前致谢

我认为查询 returns 只有一个结果,它只需要您列表中的最后一个城市(在您的 cas 中为“Olhão”坐标)。

您可以通过记录DATA内容来查看。

我不知道维基百科 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