爬虫系列实战:使用json解析天气数据

大家好,爬虫是一项非常抢手的技能,收集、分析和清洗数据是数据科学项目中最重要的部分,本文介绍使用json解析气象局天气数据。

在官网上获取天气数据信息,可以定义当前查询的位置,提取时间、温度、湿度、气压、风速等信息,并导入requests、matplotlib这些需要用到的库。

# 导入以下模块
import requests
import matplotlib.pyplot as plt
import pylab as pl

1.获取今日天气

调用api接口地址,获取天气数据接口,本文获取57494代表武汉的数据接口,进而获取json数据,并判断json请求是否成功。

def get_weather():
    # 调用api接口地址
    # 获取57494代表武汉的天气数据接口
    url = "https://weather.cma.cn/api/now/57494"

# 获取json数据
    json_datas = requests.get(url=url).json()
    #判断json请求是否成功?
    if json_datas.get("msg") == "success":
        # 请求成功
        json_location = json_datas.get("data").get("location")
        # 位置信息
        print('\n', '当前查询的位置'.center(50, '—'))
        print("城市代码: " + json_location.get("id") + "   城市名称: " + json_location.get("name") +"   详细地址: " + json_location.get("path"));
        # 当天天气信息
        json_now_data = json_datas.get("data").get("now")

        # 获取最新发布时间
        now_time = "最新天气发布时间:" + str(json_datas.get("data").get("lastUpdate"))
        print('\n',now_time.center(50, '—'))
        print("\n温度: " + str(json_now_data.get("temperature")) + "   气压: " + str(json_now_data.get("pressure")) +"  湿度: " + str(json_now_data.get("humidity")))
        print("\n风向: " + json_now_data.get("windDirection") + "   风力等级: " + json_now_data.get("windScale"))

    else:
        # 提示失败
        print("服务器返回的数据,失败了!")

2.可视化显示温度曲线

解析json数据,获取历史最大和最小的温度数据,进行图表绘制,可视化展示温度数据,使用绘图库输出可视化结果。

def get_Max_temperature():
    url = "https://weather.cma.cn/api/climate"
    # 1传数据参数
    params = {
                "stationid": 57494
            }
    # 2.获取json数据
    json_datas= requests.get(url=url, params=params).json()
    #print(json_datas)
    # 3.解析json数据,图表绘制
    data=json_datas.get("data").get("data")
    x = range(1, 13, 1) #显示12个月
    # 4.获取最大和最小的温度数据
    y = [maxTemp.get("maxTemp") for maxTemp in data]
    
    y1 = [minTemp.get("minTemp") for minTemp in data]

    pl.rcParams["font.sans-serif"] = ["SimHei"]
    plt.figure(figsize=(70, 70), dpi=100)
    plt.plot(x, y)
    plt.plot(x, y1)
    plt.xticks(x, ["{}月".format(i) for i in x])
    plt.title("1981年-2010年月平均气温和降水")
    plt.show()


if __name__ == "__main__":
    get_weather()

    get_Max_temperature()
    print('数据获取完成!!!')

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
如果您下载了本程序,但是该程序存在问题无法运行,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的)。另外,您不会使用资源的话(这种情况不支持退款),也可以找我们帮助(需要追加额外费用) 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
好的,您想了解关于Python爬取豆瓣小组动态网页话题数据的相关内容,是吗?那我来简单介绍一下。 豆瓣小组的话题数据是通过Ajax动态加载的,因此我们需要模拟浏览器发送Ajax请求,获取动态数据。具体的实现过程可以分为以下几个步骤: 1. 解析动态网页的URL,获取Ajax请求的参数。 豆瓣小组话题数据的动态网页URL为:https://www.douban.com/group/topic/XXX/?start=YYY 其中,XXX为话题的ID,YYY为话题的起始位置。我们需要根据话题ID和起始位置构造Ajax请求的参数。 ```python import re import requests url = 'https://www.douban.com/group/topic/{}/?start={}' topic_id = '123456' # 话题ID start = 0 # 起始位置 ajax_url = url.format(topic_id, start) # 解析话题ID和起始位置 html = requests.get(url).text topic_id = re.search(r'topic/(\d+)/', html).group(1) start = 0 ajax_url = url.format(topic_id, start) ``` 2. 发送Ajax请求,获取动态数据。 ```python import json headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', 'X-Requested-With': 'XMLHttpRequest' } response = requests.get(ajax_url, headers=headers) data = json.loads(response.text) ``` 其中,headers中添加了X-Requested-With字段,用于模拟Ajax请求。response是服务器响应的HTTP响应对象,data是响应内容的JSON格式。 3. 解析动态数据,提取话题内容。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(data['html'], 'html.parser') for topic in soup.find_all('tr', class_=''): # 遍历所有话题 title = topic.find('a', class_='title')['title'] # 话题标题 content = topic.find('p', class_='').get_text().strip() # 话题内容 author = topic.find('a', class_='').get_text().strip() # 话题作者 reply_time = topic.find('td', class_='time').get_text().strip() # 回复时间 reply_count = topic.find('td', class_='').get_text().strip() # 回复数 view_count = topic.find('td', class_='').get_text().strip() # 浏览数 ``` 其中,使用BeautifulSoup解析动态数据的HTML代码,通过find_all方法获取所有话题的tr元素,然后提取话题的标题、内容、作者、回复时间、回复数和浏览数等信息。 以上就是Python爬取豆瓣小组动态网页话题数据的基本步骤,具体的实现细节还需要根据具体的需求进行调整。希望能对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

python慕遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值