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 ...
随机推荐
- LXC学习实践(2)安装LXC
1.准备工作: yum install gcc yum install libcap-devel yum install libcgroup 2.安装LXC 下载源代码:sourceforge.net ...
- 新概念英语(1-19)Tired and thirsty
新概念英语(1-19)Tired and thirsty Why do the children thank their mother? A:What's the matter, children? ...
- NHibernate的基本使用
一.O/R Mapping 概论 工厂模式+反射+每个数据库的DAL层来解决数据访问层的代码 针对数据库表中字段的变化我们是无法预料的,所以每一次用户需求的修改都会直接导致我们程序员来修改—实体类(B ...
- Tcl与Design Compiler (一)——前言
已经学习DC的使用有一段时间了,在学习期间,参考了一些书,写了一些总结.我也不把总结藏着掖着了,记录在博客园里面,一方面是记录自己的学习记录,另一方面是分享给大家,希望大家能够得到帮助.参考的书籍有很 ...
- WebApi 基于token的多平台身份认证架构设计
1 概述 在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情. 随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格局 . 不同的客户端产生了不同的用户使用 ...
- uva 10917 Walk Through The Forest
题意: 一个人从公司回家,他可以从A走到B如果从存在从B出发到家的一条路径的长度小于任何一条从A出发到家的路径的长度. 问这样的路径有多少条. 思路: 题意并不好理解,存在从B出发到家的一条路径的长度 ...
- Spring(五):Spring&Struts2&Hibernate整合后,实现查询Employee信息
背景: 基于之前两篇文章<Spring(三):Spring整合Hibernate>.<Spring(四):Spring整合Hibernate,之后整合Struts2>,了解了如 ...
- spring boot 系列之三:spring boot 整合JdbcTemplate
前面两篇文章我们讲了两件事情: 通过一个简单实例进行spring boot 入门 修改spring boot 默认的服务端口号和默认context path 这篇文章我们来看下怎么通过JdbcTemp ...
- scrapy 选择器官方文档
当抓取网页时,常见的任务是从HTML源码中提取数据.现有的一些库可以达到这个目的: BeautifulSoup lxml Scrapy 提取数据有自己的一套机制.它们被称作选择器(seletors), ...
- Spring Cloud学习笔记-006
服务容错保护:Spring Cloud Hystrix 在微服务架构中,我们将系统拆分成了很多服务单元,各单元的应用间通过服务注册与订阅的方式互相依赖.由于每个单元都在不同的进程中运行,依赖通过远程调 ...