python3获取网页天气预报信息并打印
查到一个可以提供区域天气预报的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获取网页天气预报信息并打印的更多相关文章
- php获取网页header信息的4种方法
php获取网页header信息的方法多种多样,就php语言来说,我知道的方法有4种, 下面逐一献上. 方法一:使用get_headers()函数 推荐指数: ★★★★★ get_header方法最简单 ...
- Python3获取大量电影信息:调用API
实验室这段时间要采集电影的信息,给出了一个很大的数据集,数据集包含了4000多个电影名,需要我写一个爬虫来爬取电影名对应的电影信息. 其实在实际运作中,根本就不需要爬虫,只需要一点简单的Python基 ...
- Python3获取拉勾网招聘信息
为了了解跟python数据分析有关行业的信息,大概地了解一下对这个行业的要求以及薪资状况,我决定从网上获取信息并进行分析.既然想要分析就必须要有数据,于是我选择了拉勾,冒着危险深入内部,从他们那里得到 ...
- Python爬虫学习之获取网页源码
偶然的机会,在知乎上看到一个有关爬虫的话题<利用爬虫技术能做到哪些很酷很有趣很有用的事情?>,因为强烈的好奇心和觉得会写爬虫是一件高大上的事情,所以就对爬虫产生了兴趣. 关于网络爬虫的定义 ...
- Python3.x获取网页源码
Python3.x获取网页源码 1,获取网页的头部信息以确定网页的编码方式: import urllib.request res = urllib.request.urlopen('http://ww ...
- (java)Jsoup爬虫学习--获取网页所有的图片,链接和其他信息,并检查url和文本信息
Jsoup爬虫学习--获取网页所有的图片,链接和其他信息,并检查url和文本信息 此例将页面图片和url全部输出,重点不太明确,可根据自己的需要输出和截取: import org.jsoup.Jsou ...
- [整]C#获取天气预报信息(baidu api)包括pm2.5
/// <summary> /// 获取天气预报信息 /// </summary> /// <returns></returns> public Bai ...
- C# HttpWebRequest 绝技 根据URL地址获取网页信息
如果要使用中间的方法的话,可以访问我的帮助类完全免费开源:C# HttpHelper,帮助类,真正的Httprequest请求时无视编码,无视证书,无视Cookie,网页抓取 1.第一招,根据URL地 ...
- 使用URLConnection获取网页信息的基本流程
参考自core java v2, chapter3 Networking. 注:URLConnection的子类HttpURLConnection被广泛用于Android网络客户端编程,它与apach ...
随机推荐
- vue-cli webpack3扩展多模块打包
场景 在实际的项目开发中会出现这样的场景,项目中需要多个模块(单页或者多页应用)配合使用的情况,而vue-cli默认只提供了单入口打包,所以就想到对vue-cli进行扩展 实现 首先得知道webpac ...
- Mosquito集群模式
参考链接: http://blog.csdn.net/z729685731/article/details/70142182 http://blog.csdn.net/yuhaiyang457288/ ...
- SpringCloud的DataRest(一)
一.概念与定义 Spring Data Rest 基于Spring Data的repository,可以把 repository 自动输出为REST资源, 这样做的好处: 可以免去大量的 contro ...
- Spark-1.X编译构建及配置安装
前提条件(环境要求) jdk版本:1.7+ scala版本:1.10.4+ maven版本:3.3.3+ 本博客中使用的软件版本 spark版本:spark-1.6.1.tar.gz(源码) jdk版 ...
- SQL Server数据库优化的10多种方法
巧妙优化sql server数据库的几种方法,在实际操作中导致查询速度慢的原因有很多,其中最为常见有以下的几种:没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷). I/O吞吐量小, ...
- LinkedHashMap就这么简单【源码剖析】
前言 声明,本文用得是jdk1.8 前面已经讲了Collection的总览和剖析List集合以及散列表.Map集合.红黑树还有HashMap基础了: Collection总览 List集合就这么简单[ ...
- ios8新的api
self.navigationController.hidesBarsOnSwipe=YES; 滚动时隐藏导航栏
- python 正则详解
正则表达式概述 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),是计算机科学的 ...
- 微信 登录 Scope 参数错误或没有 Scope 权限
//电脑端 扫码授权登录 public static string AuthUrl = "https://open.weixin.qq.com/connect/qrconnect?appid ...
- jacascript 立即执行函数(IIFE)与闭包
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 一直没搞清楚立即执行函数和闭包之间的关系,总结一下: 闭包有很多种理解:访问不到内部作用域,函数就是这样, ...