查到一个可以提供区域天气预报的url,说明文档在https://www.sojson.com/blog/234.html,

https://www.sojson.com/open/api/weather/json.shtml?city=%E6%88%90%E9%83%BD

打算用python从上面获取预报信息,打印下来

代码如下:
 #python 3.6
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'BH8ANK' import urllib.request
import time
import ssl
import json
# #weather = "https://www.baidu.com"
time.sleep(3) #此处等待3秒主要是对应网页提示,三秒内只能访问一次
ssl._create_default_https_context = ssl._create_unverified_context
url = r"https://www.sojson.com/open/api/weather/json.shtml?city=%E6%88%90%E9%83%BD"#一个提供区域天气预报的url page = urllib.request.urlopen(url)
# # ssl._create_default_https_context=ssl._create_unverified_context
html = page.read().decode("utf-8") '''
json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串)
(1)json.dumps()函数是将一个Python数据类型列表进行json格式的编码(可以这么理解,json.dumps()函数是将字典转化为字符串)
(2)json.loads()函数是将json格式数据转换为字典(可以这么理解,json.loads()函数是将字符串转化为字典)
''' res = json.loads(html)
a = json.dumps(res, ensure_ascii=False, indent=4) #将读取到的内容格式化,这样就可以看到有缩进、换行的内容
# print(a)
fp = open(r"C:\Users\xxx\Documents\weather.txt", "w",encoding='UTF-8') #将读取内容保存到文件
fp.write(a) #写入数据
fp.close() #关闭文件 res = json.loads(a) #将json转化为dict
# print(res) '''
通过查看抓到的代码,发现dict中嵌套了dict,所以需要把对应的dict取出来
同样,forecast中,在list里嵌套了dict,需要仔细查看并设置中间变量
'''
today = res['data']
yesterday = today['yesterday']
forcast = today['forecast']
tomorrow = forcast[0] #注意看res文件内容,forecast其实是一个list,其元素才是dict print("\n\n")
print("===============今日天气===============")
print("日期: ",res['date'])
print("城市: ",res['city'])
print("温度: ",today['wendu'])
print("湿度: ",today['shidu'])
print("PM2.5: ",today['pm25'])
print("空气质量: ",today['quality']) print("\n\n")
print("===============昨日天气===============")
print("日期: ",yesterday['date'])
print("城市: ",res['city'])
print("最高温度: ",yesterday['high'])
print("最低温度: ",yesterday['low'])
print("天气状况: ",yesterday['type'])
# print("PM2.5: ",today['pm25'])
# print("空气质量: ",today['quality']) print("\n\n")
print("===============明日预报===============")
print("日期: ",tomorrow['date'])
print("城市: ",res['city'])
print("最高温度: ",tomorrow['high'])
print("最低温度: ",tomorrow['low'])
print("天气状况: ",tomorrow['type'])
print("温馨提醒: ",tomorrow['notice'])
# print("PM2.5: ",today['pm25'])
# print("空气质量: ",today['quality']) '''
下面是文件中的全部内容,主要是分清楚dict和list的层次,设置好中间变量,取出对应元素
{
"date": "20180426",
"message": "Success !",
"status": 200,
"city": "成都",
"count": 627,
"data": {
"shidu": "77%",
"pm25": 19.0,
"pm10": 40.0,
"quality": "优",
"wendu": "17",
"ganmao": "各类人群可自由活动",
"yesterday": {
"date": "25日星期三",
"sunrise": "06:28",
"high": "高温 22.0℃",
"low": "低温 14.0℃",
"sunset": "19:37",
"aqi": 34.0,
"fx": "无持续风向",
"fl": "<3级",
"type": "阴",
"notice": "不要被阴云遮挡住好心情"
},
"forecast": [
{
"date": "26日星期四",
"sunrise": "06:27",
"high": "高温 25.0℃",
"low": "低温 15.0℃",
"sunset": "19:38",
"aqi": 51.0,
"fx": "无持续风向",
"fl": "<3级",
"type": "多云",
"notice": "阴晴之间,谨防紫外线侵扰"
},
{
"date": "27日星期五",
"sunrise": "06:26",
"high": "高温 27.0℃",
"low": "低温 16.0℃",
"sunset": "19:39",
"aqi": 79.0,
"fx": "无持续风向",
"fl": "<3级",
"type": "多云",
"notice": "阴晴之间,谨防紫外线侵扰"
},
{
"date": "28日星期六",
"sunrise": "06:25",
"high": "高温 26.0℃",
"low": "低温 17.0℃",
"sunset": "19:39",
"aqi": 79.0,
"fx": "无持续风向",
"fl": "<3级",
"type": "多云",
"notice": "阴晴之间,谨防紫外线侵扰"
},
{
"date": "29日星期日",
"sunrise": "06:24",
"high": "高温 27.0℃",
"low": "低温 18.0℃",
"sunset": "19:40",
"aqi": 71.0,
"fx": "无持续风向",
"fl": "<3级",
"type": "多云",
"notice": "阴晴之间,谨防紫外线侵扰"
},
{
"date": "30日星期一",
"sunrise": "06:23",
"high": "高温 25.0℃",
"low": "低温 17.0℃",
"sunset": "19:41",
"aqi": 66.0,
"fx": "无持续风向",
"fl": "<3级",
"type": "小雨",
"notice": "雨虽小,注意保暖别感冒"
}
]
}
} '''

主要思路是:1,先从url获取信息;2,将信息格式化,转换为dict;3,从dict中取出对应的项

注意网络连接,目标网址会识别同一IP的访问频率,三秒以内只允许一次

关键步骤是,从url获取信息后,得到的内容是没有换行和缩进的,即非格式化数据,所以需要使用json.dumps和json.loads将数据格式化

  

备注:

json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串)

(1)json.dumps()函数是将一个Python数据类型列表进行json格式的编码(可以这么理解,json.dumps()函数是将字典转化为字符串

(2)json.loads()函数是将json格式数据转换为字典(可以这么理解,json.loads()函数是将字符串转化为字典)

python3获取网页天气预报信息并打印的更多相关文章

  1. php获取网页header信息的4种方法

    php获取网页header信息的方法多种多样,就php语言来说,我知道的方法有4种, 下面逐一献上. 方法一:使用get_headers()函数 推荐指数: ★★★★★ get_header方法最简单 ...

  2. Python3获取大量电影信息:调用API

    实验室这段时间要采集电影的信息,给出了一个很大的数据集,数据集包含了4000多个电影名,需要我写一个爬虫来爬取电影名对应的电影信息. 其实在实际运作中,根本就不需要爬虫,只需要一点简单的Python基 ...

  3. Python3获取拉勾网招聘信息

    为了了解跟python数据分析有关行业的信息,大概地了解一下对这个行业的要求以及薪资状况,我决定从网上获取信息并进行分析.既然想要分析就必须要有数据,于是我选择了拉勾,冒着危险深入内部,从他们那里得到 ...

  4. Python爬虫学习之获取网页源码

    偶然的机会,在知乎上看到一个有关爬虫的话题<利用爬虫技术能做到哪些很酷很有趣很有用的事情?>,因为强烈的好奇心和觉得会写爬虫是一件高大上的事情,所以就对爬虫产生了兴趣. 关于网络爬虫的定义 ...

  5. Python3.x获取网页源码

    Python3.x获取网页源码 1,获取网页的头部信息以确定网页的编码方式: import urllib.request res = urllib.request.urlopen('http://ww ...

  6. (java)Jsoup爬虫学习--获取网页所有的图片,链接和其他信息,并检查url和文本信息

    Jsoup爬虫学习--获取网页所有的图片,链接和其他信息,并检查url和文本信息 此例将页面图片和url全部输出,重点不太明确,可根据自己的需要输出和截取: import org.jsoup.Jsou ...

  7. [整]C#获取天气预报信息(baidu api)包括pm2.5

    /// <summary> /// 获取天气预报信息 /// </summary> /// <returns></returns> public Bai ...

  8. C# HttpWebRequest 绝技 根据URL地址获取网页信息

    如果要使用中间的方法的话,可以访问我的帮助类完全免费开源:C# HttpHelper,帮助类,真正的Httprequest请求时无视编码,无视证书,无视Cookie,网页抓取 1.第一招,根据URL地 ...

  9. 使用URLConnection获取网页信息的基本流程

    参考自core java v2, chapter3 Networking. 注:URLConnection的子类HttpURLConnection被广泛用于Android网络客户端编程,它与apach ...

随机推荐

  1. MSIL实用指南-生成if...else...语句

    if...else...语句是非常重要的选择语句,它的生成一般需要ILGenerator的DefineLabel方法和MarkLabel方法,以及Brtrue_S和Br_S指令. 一.DefineLa ...

  2. IPv6原理、应用与实践

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯微信技术架构部团队 2017年11月26日,中共中央办公厅和国务院办公厅印发了<推荐互联网协议第六版(IPv6)规模部署行动 ...

  3. python爬虫动态html selenium.webdriver

    python爬虫:利用selenium.webdriver获取渲染之后的页面代码! 1 首先要下载浏览器驱动: 常用的是chromedriver 和phantomjs chromedirver下载地址 ...

  4. poj 2945 Find the Clones

    https://vjudge.net/problem/POJ-2945 题意: 给出n个长度相同的DNA序列,如果一个DNA序列出现过两次,那么就有说明它被复制了一次.问被复制0次,1次,2次--n- ...

  5. SpringBoot(四):banner的控制

    banner在springboot中是一个支持可配(banner的样式,banner的颜色,banner的内容).是否显示. 1)banner显示内容配置: 默认springboot如果在src/re ...

  6. spring boot 系列之二:spring boot 如何修改默认端口号和contextpath

    上一篇文件我们通过一个实例进行了spring boot 入门,我们发现tomcat端口号和上下文(context path)都是默认的, 如果我们对于这两个值有特殊需要的话,需要自己制定的时候怎么办呢 ...

  7. NGUI---使用脚本控制聊天系统的内容显示,输入事件交互

    在我的笔记Unity3D里面之 简单聊天系统一 里面已经介绍怎么创建聊天系统的背景.给聊天系统添加滚动条,设置Anchor锚点.以及设计聊天系统的输入框. 效果图如下所示: 现在我们要做的就是使用脚本 ...

  8. Windows使用Gitblit搭建Git服务器

    安装之前需确定安装JAVA运行环境. 下载安装 首先到 Gitblit官网 下载安装包.此处使用的版本是1.8.0. 将解压得到的gitblit-1.8.0文件夹放于C:\gitServer目录下. ...

  9. 前端之旅HTML与CSS篇之清除浮动塌陷

    以下内容为转载. 方法1:给浮动的元素的上级添加高度如果一个元素要浮动,那么它的祖先元素一定要有高度.高度的盒子,才能关住浮动.只要浮动在一个有高度的盒子中,那么这个浮动就不会影响后面的浮动元素.所以 ...

  10. [LeetCode] Bulb Switcher II 灯泡开关之二

    There is a room with n lights which are turned on initially and 4 buttons on the wall. After perform ...