内容如下:

制作天气接口API服务器:
- 天气模块:
- 后台逻辑:
- 路由设置:

天气模块
本文分别使用正则表达式和lxml+xpath进行数据爬取,抓取当前时间天气和未来7天天气数据

import re
import requests
from urllib import request
from xpinyin import Pinyin
import time
from lxml import etreeclass WeatherParse(object):Headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}Url = 'https://www.tianqi.com/'@classmethoddef parse_weather_now(cls, url, headers):weather_now = dict()resp = requests.get(url, headers=headers)text = resp.textcity = re.findall(r'<dd class="name"><h2>(.*?)</h2>', text, re.DOTALL)[0]weather = re.findall(r'<span><b>(.*?)</b>', text, re.DOTALL)[0]temperature = re.findall(r'<p class="now"><b>(.*?)</b>', text, re.DOTALL)[0]now_time = re.findall(r'<dd class="week">(.*?)</dd>', text, re.DOTALL)[0]date = re.findall(r'(.*?)日', now_time)[0] + '日'week = '星期'+ re.findall(r'星期(.*?)\s', now_time)[0]img_url = 'http://' + re.findall(r'<dd class="weather">\n<i><img src="//(.*?)">', text, re.DOTALL)[0]items = re.findall(r'<dd class="shidu"><b>(.*?)</b><b>(.*?)</b><b>(.*?)</b>', text, re.DOTALL)[0]nodes = []for item in list(items):temp = re.split(r':', item)[1]nodes.append(temp)humidity = nodes[0]wind_direct = nodes[1]ultraviolet_rays = nodes[2]quality = re.findall(r'<dd class="kongqi">.*?:(.*?)</h5>', text, re.DOTALL)[0]PM = re.findall(r'<dd class="kongqi">.*?</h5><h6>PM:(.*?)</h6>', text, re.DOTALL)[0].strip()# print('城市:%s\t气温:%s℃\t%s\t 日期:%s\t 湿度:%s\t风西:%s\t紫外线:%s\t天气:%s\t天气质量:%s\tPM:%s'#       % (city, temperature, week, date, humidity, wind_direct, ultraviolet_rays, weather, quality, PM))# print('imgUrl:%s' % img_url)datetime = time.strftime('%H:%M:%S', time.localtime(time.time()))weather_now['city'] = cityweather_now['week'] = weekweather_now['date'] = dateweather_now['datetime'] = datetimeweather_now['quality'] = qualityweather_now['temperature'] = temperatureweather_now['weather'] = weatherweather_now['wind_direct'] = wind_directweather_now['humidity'] = humidityweather_now['ultraviolet_rays'] = ultraviolet_raysweather_now['PM'] = PMweather_now['img_url'] = img_urlreturn weather_now@classmethoddef parse_weather_7(cls, url, headers, city):resp = requests.get(url, headers=headers)# text = resp.content.decode('utf-8')text = resp.texthtml = etree.HTML(text)datetimes = []weeks = []img_urls = []date_weeks = html.xpath("//ul[@class='week']/li")for item in date_weeks:datetimes.append(item.xpath("./b/text()")[0])weeks.append(item.xpath("./span/text()")[0])img_urls.append('http:' + item.xpath("./img/@src")[0])weathers = html.xpath("//ul[@class='txt txt2']/li/text()")temperatures = html.xpath("//div[@class='zxt_shuju']/ul")[0]max_temperatures = temperatures.xpath("./li/span/text()")min_temperatures = temperatures.xpath("./li/b/text()")results = []for i in range(len(weathers)):result = dict()result['datetime'] = datetimes[i]result['week'] = weeks[i]result['weather'] = weathers[i]result['max_temperature'] = max_temperatures[i]result['min_temperature'] = min_temperatures[i]result['img_url'] = img_urls[i]results.append(result)all= dict()all[city] = resultsreturn alldef get_weather_now(self, city):p = Pinyin()x = p.get_pinyin(city, '')url = request.urljoin(self.Url, x)now = self.parse_weather_now(url, self.Headers)return nowdef get_future_weather(self, city):p = Pinyin()x = p.get_pinyin(city, '')url = request.urljoin(self.Url, x)future = self.parse_weather_7(url, self.Headers, city)return future

模块测试:

w = WeatherParse()
now= w.get_weather_now('北京')
future = w.get_future_weather('上海')
print(now)
print(future)

结果示例如下:

{'city': '北京', 'week': '星期日', 'date': '2019年10月20日', 'datetime': '17:52:19', 'quality': '优', 'temperature': '20', 'weather': '晴', 'wind_direct': '西风 2级', 'humidity': '18%', 'ultraviolet_rays': '无', 'PM': '18', 'img_url': 'http://static.tianqistatic.com/static/wap2018/ico1/b0.png'}
{'上海': [
{'datetime': '10月20日', 'week': '星期日', 'weather': '晴', 'max_temperature': '23', 'min_temperature': '16', 'img_url': 'http://static.tianqistatic.com/static/wap2018/ico1/b0.png'},
{'datetime': '10月21日', 'week': '星期一', 'weather': '多云', 'max_temperature': '24', 'min_temperature': '17', 'img_url': 'http://static.tianqistatic.com/static/wap2018/ico1/b1.png'},
{'datetime': '10月22日', 'week': '星期二', 'weather': '多云', 'max_temperature': '23', 'min_temperature': '18', 'img_url': 'http://static.tianqistatic.com/static/wap2018/ico1/b1.png'},
{'datetime': '10月23日', 'week': '星期三', 'weather': '多云', 'max_temperature': '24', 'min_temperature': '18', 'img_url': 'http://static.tianqistatic.com/static/wap2018/ico1/b1.png'},
{'datetime': '10月24日', 'week': '星期四', 'weather': '多云', 'max_temperature': '24', 'min_temperature': '18', 'img_url': 'http://static.tianqistatic.com/static/wap2018/ico1/b1.png'},
{'datetime': '10月25日', 'week': '星期五', 'weather': '多云', 'max_temperature': '24', 'min_temperature': '17', 'img_url': 'http://static.tianqistatic.com/static/wap2018/ico1/b1.png'},
{'datetime': '10月26日', 'week': '星期六', 'weather': '多云', 'max_temperature': '21', 'min_temperature': '15', 'img_url': 'http://static.tianqistatic.com/static/wap2018/ico1/b1.png'}
]}

制作天气接口API服务器【1.天气模块】相关推荐

  1. android百度天气接口api接口,百度天气接口api

    百度天气接口 以GET形式提交,返回JSON或XML URL:http://api.map.baidu.com/telematics/v3/weather?location={城市名}&out ...

  2. php调用天气预报接口,PHP调用百度天气接口API实现查询实时天气

    现在,不用守着晚上7点半的时间去看第二天的天气预报,只要你有手机,有网络,便可以轻松查询实时天气,可你知道怎么用PHP实现的吗?本文将带大家学习一种调用百度天气接口的方式,直接在PHP上查看实时天气, ...

  3. php 百度天气接口api接口,PHP调用百度天气接口API实现查询实时天气

    现在,不用守着晚上7点半的时间去看第二天的天气预报,只要你有手机,有网络,便可以轻松查询实时天气,可你知道怎么用PHP实现的吗?本文将带大家学习一种调用百度天气接口的方式,直接在PHP上查看实时天气, ...

  4. 推荐6个微信小程序天气接口Api

    前几天我在天气小程序的过程中,上网找了一些天气的api 服务商,顺便点评一下:发现高德和百度都有提供相关的接口. No1.高德地图 高德地图是从17年1月就开始给小程序提供地图服务了,其中该服务中有相 ...

  5. 免费天气接口php,360免费天气Api接口(附使用示例)

    网上的大多数天气接口要么是收费的,要么只支持 iframe 嵌入方式,根本就没法用-- 今天"不小心"从 360 那挖到了一个支持 json 的天气接口,支持自动判断地区,获取最近 ...

  6. 【微信小程序】使用和风天气接口api(全过程)——获取天气

    介绍 这里是小编成长之路的历程,也是小编的学习之路.希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡. 一个人为什么要努力? ...

  7. java百度天气接口解析_Java调用天气接口(百度天气)解析返回的JSON数据

    简介:本文详细讲述了通过Java调用百度天气接口的方法,取得返回的JSON格式的数据,并且通过第三方包解析JSON格式的数据. 通过百度天气API调用网络编程接口接收返回的JSON格式的数据. 关于百 ...

  8. 如何将阿里云天气接口中返回的天气图标转换成对应的url

    上一篇文章中我们谈到了阿里云天气接口的使用,但是,在这个接口返回的数据中,有一个图标问题是需要我们注意的. 如图所示: 阿里云接口返回的天气图标是一个状态值,拿到之后是没法直接使用的,所以,我们需要将 ...

  9. kettle调用免费天气接口API入库

    1.采用中华万年历天气API //URL: http://wthrcdn.etouch.cn/weather_mini?city=太原 //获取到的json数据 {"data": ...

最新文章

  1. Hadoop准备篇之(一):Page Rank算法初探
  2. Apache服务器配置技巧
  3. LeetCode 3 无重复字符的最长子串
  4. 信用卡套现只要正常还款,银行是不是睁只眼闭只眼?
  5. 【Canal源码分析】Sink及Store工作过程
  6. C++ 自定义调试信息的输出
  7. 20172314 2018-2019-1《程序设计与数据结构》第一周学习总结
  8. 人工智能应用,德国AI公司
  9. cocos creator 判断双击_Creator | 编辑器中可操作顶点的多边形遮罩
  10. SpringBoot整合Shiro实现登录认证授权操作
  11. Center OS7网络设置
  12. Http-Only Cookie
  13. IE游览器的扩展事件
  14. SQL优化常用方法51
  15. 伺服电机PID控制及增益调节
  16. 阿里云开启ipv6通过appstore审核的方法
  17. 关于五险一金(南京)
  18. DHU数据结构-循环单链表-ADT应用-圆桌问题
  19. latex设置页面大小边距行距等
  20. Bug: Safari浏览器input框placeholder和内容都不显示

热门文章

  1. 小试X64 inline HOOK,hook explorer.exe---CreateProcessInternalW监视进程创建
  2. Microsoft Visio 2010 - 弧线
  3. 计算机机房年度重点工作,信息中心计算机的机房建设要求最新.doc
  4. 【精益生产】精益生产十大工具
  5. linux限制指定ip禁止访问指定端口,linux设置iptables禁止某个IP访问
  6. 517编程3380造素数
  7. 2021年最好的Laravel教程
  8. 浮点数的指数函数的计算
  9. GIT 报错:Branch ‘master‘ set up to track remote branch ‘master‘ from ‘origin‘
  10. 查看linux设备Ran的大小,linux – 来自/ dev / zero和/ dev / urandom的不同文件大小