据说以后是API的天下,不如弄个天气查询的API玩玩看~
首先,需要解决天气数据源的问题,第一个想法就是弄个小爬虫,去比较权威的气象网站爬下来,存到自己的库里,当日,配上个定时器,定时发动爬虫技能自动完成就好咯。(大神略过,本人只是自学的小白)
中央气象台:http://www.nmc.cn/ 就是他了,开始网页分析
进入城市页面
页面上的内容还是很多的,一种选择是直接爬取页面上的参数,不过内容较多,如果能直接抓到数据包那不是简单很多,好了,祭出神器
到这里都比较顺利,但是,发现了一个问题,访问这个页面需要带上城市的ID
再找找
是可以找到相关省份底下的城市的,这个code就是城市编号,那要查找所有身份呢,接着找
到这里就基本能确定源的问题了,开始写个小爬虫试试,这里就不进行存库操作了,做个简单的查询功能吧,上代码
from urllib import request
import urllib
#获得所有省份的CODE
def province_code():
url = 'http://www.nmc.cn/f/rest/province'
response = request.urlopen(url)
page = response.read()
page = bytes.decode(page)
content = eval(page)
p_code = {}
for i in content:
p_code[i['name']]=i['code']
return p_code
#传入省份CODE,建个字典来存放该省份所有城市的CODE,再添加到总字典中
def city_code(all_cc,pd,province):
url = 'http://www.nmc.cn/f/rest/province/'+province
response = request.urlopen(url)
page = response.read()
page = bytes.decode(page)
content = eval(page)
for i in content:
temp = {}
temp['code'] = i['code']
temp['province'] = pd
all_cc[i['city']]=temp
return all_cc
#循环所有省份,形成最终的城市code字典
def all_city_data():
p_code = province_code()
all_cc = {}
for pd in p_code:
all_cc = city_code(all_cc,pd,p_code[pd])
return all_cc
#传入查询的城市,查询出该城市的天气情况
def find_code(city_name):
all_cc = all_city_data()
url = 'http://www.nmc.cn/f/rest/tempchart/'+all_cc[city_name]['code']
response = request.urlopen(url)
page = response.read()
page = bytes.decode(page)
content = eval(page)
for i in content:
print('城市:'+city_name+','+'日期:'+str(i['realTime'])+','+'最高温度:%s,最低温度:%s' % (i['maxTemp'],i['minTemp']))
if __name__ == '__main__':
find_code('广州')
输出结果
其实页面上给的信息很多,需要慢慢的解出来,有兴趣的朋友可以研究一下,把东西存库后,用flask写个简单的查询函数与查询接口即可,放到服务器上运行即可进行查询了。
import flask
from flask import request
from flask import jsonify
import tools
import json
import urllib
#ip数据接口
from IP import jsonout
#天气数据接口
from sql import tq_json
#电影数据接口
from sql import mov_json
server = flask.Flask(__name__)
@server.route('/ip', methods=['GET', 'POST'])
def login():
ip = request.values.get('ip')
tump = jsonout(ip)
print(request.headers)
return tump
@server.route('/weather', methods=['GET', 'POST'])
def login1():
city = request.values.get('city')
print(city)
tump = tq_json(city)
print(request.headers)
return tump
@server.route('/mov', methods=['GET', 'POST'])
def login2():
mov_name = request.values.get('mov_name')
print(mov_name)
tump = mov_json(mov_name)
print(request.headers)
return tump
if __name__ == '__main__':
host = '0.0.0.0'
server.run(debug=True, port=8000,host = host)
当然,如果你也可以做个简单的页面来玩玩,比如无聊的我...
本人只是个自学python的小白,各位大神轻喷,有一样喜欢瞎折腾的朋友欢迎留言交流,也欢迎各位大神指导~