|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
import requests
#获取城市以及对应的adcode
def get_city():
#确定url
base_url = 'https://www.amap.com/service/cityList?'
# 发送请求
response = requests.get(base_url,headers=headers)
# print(response.text)
#解析json数据
json_data = response.json()
# print(json_data) 得到的json数据放到在线json解析网站中,方便分析结构
#获取adcode
#热门城市
city_adcode = []
zd=json_data["data"]["cityData"]["provinces"]
for x in zd:
if len(zd[x]["cities"])>0 :
city_adcode.append((zd[x]["adcode"],zd[x]["cities"][0]["name"],zd[x]["x"],zd[x]["y"]))
else:
city_adcode.append((zd[x]["adcode"],zd[x]["name"],zd[x]["x"],zd[x]["y"]))
return city_adcode
def get_weather(adcode,city_name,X,Y):
'''
获取城市天气
'''
#基础url
base_url = 'https://www.amap.com/service/weather?adcode={}'.format(adcode)
response = requests.get(base_url, headers=headers) #发送请求,获取响应
json_data = response.json() #获取json数据
#通过得到的json数据,在在线解析网站中解析后,分析其结构,找到要获取的在哪一个字典或者列表列表
#分层的取出来即可
if json_data['data']['result']=='true':
weather = json_data['data']['data'][0]['forecast_data'][0]['weather_name'] #当前天气
#最大温度
max_temp = json_data['data']['data'][0]['forecast_data'][0]['max_temp']
#最小温度
min_temp = json_data['data']['data'][0]['forecast_data'][0]['min_temp']
t_weather = json_data['data']['data'][1]['forecast_data'][0]['weather_name'] #明天天气
#最大温度
t_max_temp = json_data['data']['data'][1]['forecast_data'][0]['max_temp']
#最小温度
t_min_temp = json_data['data']['data'][1]['forecast_data'][0]['min_temp']
# print(weather, max_temp, min_temp)
dic = {}
dic['城市'] = city_name
dic['adcode'] = adcode
dic['X'] = X
dic['Y'] = Y
dic['天气'] = weather
dic['温度'] = '{}/{}℃'.format(min_temp,max_temp)
dic['明日天气'] = t_weather
dic['明日温度'] = '{}/{}℃'.format(t_min_temp,t_max_temp)
print(dic)
def main():
city_adcode = get_city()
# print(city_adcode)
#将每个城市的adcode传给get_weather
#city_adcode有城市和adcode
for i in city_adcode:
adcode = i[0]
city_name = i[1]
X = i[2]
Y = i[3]
get_weather(adcode,city_name,X,Y)
if __name__ == '__main__':
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537',
'X-Requested-With': 'XMLHttpRequest',
}
main()
为啥提取的只有直辖市 怎么提取出省会城市
最下面的adcode = i[0]
city_name = i[1]
X = i[2]
Y = i[3]是什么意思 用的啥子知识点
求求大佬 很急啊
本帖最后由 suchocolate 于 2021-1-17 14:59 编辑
非直辖市的adcode在城市列表里,这样改: for x in zd:
if zd[x]["cities"]: # 不用len测量长度,只要有值就是true,没有值就是false。
city_adcode.append((zd[x]["cities"][0]["adcode"], zd[x]["cities"][0]["name"], zd[x]["x"], zd[x]["y"])) # adcode获取方式有变动。
i的值是这种:('110000', '北京', '116.405285', '39.904989')
i[0]是:110000
i[1]是:北京
其他以此类推,就是普通用index访问元组的元素,没什么特别知识点。
另外我记得回答过你,为啥不直接用。 import requests
def main():
cities = dict()
url = 'https://www.amap.com/service/cityList'
headers = {'user-agent': 'Mozilla'}
r = requests.get(url, headers=headers)
json_data = r.json()['data']['cityData']['provinces']
for k, v in json_data.items():
# 普通省份
if v['cities']:
t = v['cities'][0]
cities[t['name']] = [t['x'], t['y'], t['adcode']]
# 直辖市或特区
else:
cities[v['name']] = [v['x'], v['y'], k]
for k, v in cities.items():
url = 'https://www.amap.com/service/weather?adcode=' + v[2]
# print(url)
r = requests.get(url, headers=headers)
json_data = r.json()['data']['data']
t_data = json_data[0]['forecast_data'][0]
m_data = json_data[1]['forecast_data'][0]
print(f'{k} 今天 天气:{t_data["weather_name"]}, 最高温{t_data["max_temp"]},最低温{t_data["min_temp"]}')
print(f' 明日 天气:{m_data["weather_name"]}, 最高温{m_data["max_temp"]},最低温{m_data["min_temp"]}')
print('=' * 100)
if __name__ == '__main__':
main()
|
|