|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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()
复制代码
|
|