查到一个可以提供区域天气预报的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. hadoop2.6.0实践:A03 例子验证

    [hadoop@LexiaofeiN1 ~]$ hdfs dfs -ls /output/grep[hadoop@LexiaofeiN1 ~]$ hdfs dfs -rm -R /output/gre ...

  2. api-gateway实践(02)新服务网关 - 运行环境

    一.服务网关的运行环境 1.服务配置中心 1.1.服务配置中心前台 前台 http://10.110.17.20/#/login:无源码,德奎部署在10.110.17.20的DockerStatck环 ...

  3. NHibernate从入门到精通系列(2)——NHibernate环境与结构体系

    内容摘要 NHibernate的开发环境 NHibernate的结构体系 NHibernate的配置 一.NHibernate的开发环境 NHibernate的英文官方网站为:http://nhfor ...

  4. Python入门之函数的装饰器

    本章目录: 装饰器: 一.为什么要用装饰器 二.什么是装饰器 三.无参装饰器 四.装饰器语法糖 五.认证装饰器实现 六.叠加多个装饰器 七.带参装饰器 ======================== ...

  5. Java 异常基础详解

    目录 1. Java 中的异常 1.1 什么是异常? 1.2 什么是异常处理? 1.2.1 异常处理的优势 1.3 Java 异常类的层次结构 1.4 异常类型 1.5 检查和未检查异常之间的区别 1 ...

  6. [LeetCode] K Inverse Pairs Array K个翻转对数组

    Given two integers n and k, find how many different arrays consist of numbers from 1 to n such that ...

  7. [LeetCode] Construct Binary Tree from String 从字符串创建二叉树

    You need to construct a binary tree from a string consisting of parenthesis and integers. The whole ...

  8. 使用.Net+非关系型数据库MongoDB 实现LBS商家按距离排序_按离我最近排序

    .Net MongoDB LBS地理位置定位 开发过程,实现商家按距离排序 前言: 在使用美团点外卖,看电影,找好吃的时候,经常会注意到软件有一个按距离排序,找离我最近的商家,心中有一些疑问,.Net ...

  9. Python 字符串常见的27个操作

    有字符串 mystr = "hello world itcast and itcastcpp",以下是常见的操作: 1. mystr.find(str, start=0, end= ...

  10. [python]使用django快速生成自己的博客小站,含详细部署方法

    前言 人生苦短,我用python 这是之前经常听到的一句笑谈.因为新公司很多业务是用的python语言,所以这几天也一直在学习python的一些东西. 作为一个之前一直java后端的开发人员,对比ja ...