爬虫入门指南(8): 编写天气数据爬虫程序,实现可视化分析

news2024/11/28 9:24:47

文章目录

  • 前言
  • 准备工作
  • 爬取天气数据
  • 可视化分析
  • 完整代码
    • 解释说明
  • 运行效果
  • 完结

前言

天气变化是生活中一个重要的因素,了解天气状况可以帮助我们合理安排活动和做出决策。本文介绍了如何使用Python编写一个简单的天气数据爬虫程序,通过爬取指定网站上的天气数据,并使用Matplotlib库对数据进行可视化分析。通过这个例子,我们不仅可以学习Python的相关库的使用,还可以探索天气数据的规律和趋势。

在这里插入图片描述

准备工作

在开始之前,确保你已经安装了所需的Python库:requests, BeautifulSoup和Matplotlib。你可以使用pip来安装它们,命令如下:

pip install requests beautifulsoup4 matplotlib

爬取天气数据

在这里插入图片描述

首先,我们需要确定要爬取的天气数据的来源。在这个例子中,我们选择了中国天气网(http://www.weather.com.cn/)上的天气数据。 我们爬取了北京市的天气数据。

代码中的 get_weather_data 函数负责发送HTTP请求并解析网页内容。首先,我们使用requests库向指定的URL发送GET请求,并指定编码为utf-8。然后,我们使用BeautifulSoup库解析网页内容,并通过CSS选择器获取温度数据。最后,把温度数据存储到一个列表中,并返回该列表。

以下是爬取天气数据的步骤:

  • 导入所需的库:
import requests
from bs4 import BeautifulSoup
  • 定义一个get_weather_data函数,用于发送HTTP请求并解析网页内容:
def get_weather_data():
    url = 'http://www.weather.com.cn/weather/101010100.shtml'  # 北京天气预报页面的URL
    response = requests.get(url)  # 发送GET请求
    response.encoding = 'utf-8'  # 设置编码为utf-8
    soup = BeautifulSoup(response.text, 'html.parser')  # 使用BeautifulSoup解析网页内容

    temperatures = []  # 存储温度数据的列表
    temperature_elements = soup.select('.tem i')  # 使用CSS选择器获取温度数据的HTML元素
    for element in temperature_elements:
        temperatures.append(element.text)  # 提取温度数据并添加到列表中

    return temperatures  # 返回温度数据列表
  • 调用get_weather_data函数来获取天气数据:
weather_data = get_weather_data()

可视化分析

  • 导入所需的库:
import matplotlib.pyplot as plt
  • 定义一个plot_weather_data函数,用于绘制折线图展示温度随时间的变化趋势:
def plot_weather_data(temperatures):
    plt.plot(temperatures)  # 绘制折线图

    plt.title('Weather Forecast')  # 设置图表标题
    plt.xlabel('Days')  # 设置X轴标签
    plt.ylabel('Temperature (°C)')  # 设置Y轴标签

    plt.show()  # 显示图表
  • 调用plot_weather_data函数来绘制折线图:
plot_weather_data(weather_data)

完整代码

import requests  # 导入requests库,用于发送HTTP请求
from bs4 import BeautifulSoup  # 导入BeautifulSoup库,用于解析网页内容
import matplotlib.pyplot as plt  # 导入Matplotlib库,用于数据可视化


def get_weather_data():
    url = 'http://www.weather.com.cn/weather/101010100.shtml'  # 天气预报页面的URL
    response = requests.get(url)  # 发送GET请求,获取网页内容
    response.encoding = 'utf-8'  # 设置编码为utf-8,确保正确解析中文
    soup = BeautifulSoup(response.text, 'html.parser')  # 使用BeautifulSoup解析网页内容

    temperatures = []  # 存储温度数据的列表
    temperature_elements = soup.select('.tem i')  # 使用CSS选择器获取温度数据的HTML元素
    for element in temperature_elements:
        temperatures.append(element.text)  # 提取温度数据并添加到列表中

    return temperatures  # 返回温度数据列表


def plot_weather_data(temperatures):
    plt.plot(temperatures)  # 绘制折线图

    plt.title('Weather Forecast')  # 设置图表标题
    plt.xlabel('Days')  # 设置X轴标签
    plt.ylabel('Temperature (°C)')  # 设置Y轴标签

    plt.show()  # 显示图表


if __name__ == '__main__':
    weather_data = get_weather_data()  # 获取天气数据
    plot_weather_data(weather_data)  # 绘制天气数据的折线图

解释说明

  1. 导入必要的库:

    • 使用import requests导入requests库,用于发送HTTP请求。
    • 使用from bs4 import BeautifulSoup导入BeautifulSoup库,用于解析网页内容。
    • 使用import matplotlib.pyplot as plt导入matplotlib.pyplot库,用于数据可视化。
  2. 定义get_weather_data函数:

    • 定义url变量,存储天气预报页面的URL。
    • 使用requests.get(url)发送GET请求,获取网页内容。
    • 将编码设置为utf-8,以确保正确解析中文。
    • 使用BeautifulSoup(response.text, 'html.parser')解析网页内容。
    • 定义一个空列表temperatures,用于存储温度数据。
    • 使用CSS选择器.tem i定位到温度数据的HTML元素。
    • 遍历温度元素,将温度数据提取并添加到temperatures列表中。
    • 最后返回温度数据列表。
  3. 定义plot_weather_data函数:

    • 使用plt.plot(temperatures)绘制折线图,传入温度数据列表作为参数。
    • 使用plt.title设置图表标题为"Weather Forecast"。
    • 使用plt.xlabel设置X轴标签为"Days"。
    • 使用plt.ylabel设置Y轴标签为"Temperature (°C)"。
    • 使用plt.show显示图表。
  4. 在主程序中执行:

    • 使用get_weather_data函数获取天气数据,并将结果存储在weather_data变量中。
    • 使用plot_weather_data函数,传入天气数据列表作为参数,绘制天气数据的折线图。

运行效果

在这里插入图片描述

完结

历时一个星期 终于将爬虫这点东西搞完了, 可能会有写欠缺,但是也还好, 希望可以帮助各位辛勤劳作的朋友
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/719842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pandas+Pyecharts | 双十一美妆销售数据分析可视化

文章目录 🏳️‍🌈 1. 导入模块🏳️‍🌈 2. Pandas数据处理2.1 读取数据2.2 数据信息2.3 筛选有销量的数据 🏳️‍🌈 3. Pyecharts数据可视化3.1 双十一前后几天美妆订单数量3.2 双十一前后几天美妆销量3.3…

【Linux】线程终结篇:线程池以及线程池的实现

linux线程完结 文章目录 前言一、线程池的实现二、了解性知识 1.其他常见的各种锁2.读者写者问题总结 前言 什么是线程池呢? 线程池一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着…

智能、安全、高效,看移远如何助力割草机智能化升级

提到割草机,大家可能首先会想到其噪声大、费人力、安全性不足等问题。智能割草机作为一种便捷、高效的智能割草设备,能够自主完成草坪修剪工作,很好地解决传统割草机的痛点问题。 随着人们对家庭园艺以及生活质量要求的逐步提高,割…

向量数据库:新一代的数据处理工具

在我们的日常生活中,数据无处不在。从社交媒体的帖子到在线购物的交易记录,我们每天都在产生和处理大量的数据。为了有效地管理这些数据,我们需要使用数据库。数据库是存储和管理数据的工具,它们可以按照不同的方式组织和处理数据…

python实现简单贪吃蛇

import math import pygame import time import numpy as np # 此模块包含游戏所需的常量 from pygame.locals import *# 设置棋盘的长宽 BOARDWIDTH 90 BOARDHEIGHT 50 # 分数 score 0# 豆子 class Food(object):def __init__(self):self.item (4, 5)# 画出食物def _draw(…

qtav源码包编译(qt5.15+msvc2019)、使用vlc media player串流生成rtsp的url并且在qml客户端中通过qtav打开

QTAV源码包编译 下载源码 下载依赖库(里面有ffmepg等内容) https://sourceforge.net/projects/qtav/files/depends/QtAV-depends-windows-x86x64.7z/download下载源码包 https://github.com/wang-bin/QtAV更新子模块 cd QtAV && git submod…

vmware postgresql大杂烩

Vmware 窗口过界: https://blog.csdn.net/u014139753/article/details/111603882 vmware, ubuntu 安装: https://zhuanlan.zhihu.com/p/141033713 https://blog.csdn.net/weixin_41805734/article/details/120698714 centos安装: https://w…

【Go】短信内链接拉起小程序

一、 需求场景 (1) 业务方,要求给用户发送的短信内含有可以拉起我们的小程序指定位置的链接; 【XXX】尊敬的客户,您好,由于您XX,请微信XX小程序-微信授权登录-个人中心去XX,如已操作请忽略,[…

Jenkins2.346新建项目时没有Maven项目选项解决办法

解决办法:需要安装Maven Integration 系统管理-->管理插件-->可选插件-->过滤输入框中输入搜索关键字: Maven Integration,下载好后安装。

Mysql:创建和管理表(全面详解)

创建和管理表 前言一、基础知识1、一条数据存储的过程2、标识符命名规则3、MySQL中的数据类型 二、创建和管理数据库1、创建数据库2、使用数据库3、修改数据库4、删除数据库 三、创建表1、创建方式12、创建方式23、查看数据表结构 四、修改表1、追加一个列2、修改一个列3、重命…

MySQL存储引擎(InnoDB、MyISAM、Memory面试题)

1.1 MySQL体系结构 1). 连接层 最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于 TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的…

暑期学JavaScript【第六天】

一、正则表达式 边界符 ^:表示以后面字符开头 $:表示以前方字符结尾量词 *:前面的字符至少出现0次 :前面的字符至少出现1次 ?:前面的字符出现0/1次 {n}:重复n次 {n,}:至少重复n次 {n,m}:重复n~m次字符类 [ ]:代表字符集合 /^[a-z]$/[ ^ ] 取反 [^a-…

leetcode 257. 二叉树的所有路径

2023.7.5 这题需要用到递归回溯,也是我第一次接触回溯这个概念。 大致思路是: 在reversal函数中,首先将当前节点的值加入到路径path中。然后判断当前节点是否为叶子节点,即没有左右子节点。如果是叶子节点,将路径转化…

nnUNet保姆级使用教程!从环境配置到训练与推理(新手必看)

文章目录 写在前面nnUNet是什么?一、配置虚拟环境二、安装nnUNet框架1.安装nnUNet这一步我遇到的两个问题: 2.安装隐藏层hiddenlayer(可选) 三、数据集准备nnUNet对于你要训练的数据是有严格要求的,这第一点就体现在我…

apple pencil值不值得购买?ipad可以用的手写笔推荐

现在市面的电容笔品牌鱼龙混杂,我们很在选购中很容易就踩坑,例如买到一些书写会频繁出现断触的,或者防误触功能会失灵。所以我们在选购中务必要擦亮双眼。而对于一些将ipad作为一种学习工具的人而言,电容笔已经是iPad中不可或缺的…

【C++】vector基本用法介绍

vector简单介绍 前言vector原型vector常用函数接口介绍vector的构造、析构、赋值构造析构 修改类的函数push_backinsertfind 函数 eraseswap 关于容量的函数max_sizesort vector\<char\> 和 string的区别vector\<数据类型\> 结束 前言 首先&#xff0c;vector的用…

vue watch

Vue.js已在全球开发人员中广受欢迎&#xff0c;这归功于其灵活的响应式系统和丰富的开发工具。本文将深入解析Vue中的Watch特性&#xff0c;我们将了解其功能&#xff0c;适用的实际例子&#xff0c;以及可能遇到的常见错误及其解决方案。 第一部分&#xff1a;Vue的Watch特性…

开放式耳机漏音有多大?开放式耳机和封闭式耳机哪个音质好?

什么是开放式耳机 从名字上理解就是开放样式的耳机&#xff0c;其实也确实如此&#xff0c;开放式耳机是不需要封闭耳道来传输声音&#xff0c;主要是通过耳骨振动传递或者声波震动耳膜&#xff0c;两者声音传递的方式都不用完全封闭耳道&#xff0c;可以让耳道对外界放开&…

【软件测试】如何梳理你测试的业务

目录 前言&#xff1a; 一、为什么要梳理业务&#xff1f; 二、梳理框架 1. 测试场景 2. 业务 3. 系统 4. 数据 5. 安全 6. 性能 7. 数据分析 8. 监控报警 9. 应急预案 前言&#xff1a; 在进行软件测试之前&#xff0c;合理和清晰地梳理测试的业务是非常重要的&a…

linux运维常用命令(持续更新)

目录 一&#xff1a; 查看指定端口是否被监听 二&#xff1a;查看某个端口/服务相关进程 三&#xff1a;在B机器查看是否可以访问A机器某个端口,查看端口是否开放 四&#xff1a;查看端口占用列表 五&#xff1a;查看端口占用情况 六&#xff1a;查看哪些进程监听了2181端…