在遍历列表的维基百科页面中查找坐标
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
可能这是个简单的问题,但我对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