python3.6 简单爬虫爬取天气,flask在线查询接口制作

据说以后是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的小白,各位大神轻喷,有一样喜欢瞎折腾的朋友欢迎留言交流,也欢迎各位大神指导~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值