Python爬取天气数据实战:从入门到精通

python爬虫——爬取全年天气数据并做可视化分析 children: 返回当前节点的直接子节点的迭代器。descendants: 返回当前节点的所有子孙节点的迭代器。接着爬取我们这个月的天气信息,存入列表中,然一次性写入我们的csv文件中,这样我们就得到了一个存有泉州2022全年天气情况的文件。find_all(): 查找所有匹配到的节点,并返回一个列表。因为绘制的图形是动态的天气轮播图,而此时我们日期的数据类型为字符串,要将类型改为datetime。parent: 返回当前节点的父节点。parents: 返回当前节点的所有祖先节点的迭代器。 阅读详情

包含编程籽料、学习路线图、爬虫代码、安装包等!【点击领取】

前言
在日常开发中,爬取天气数据是一个常见的需求,无论是为了个人项目还是商业应用。本文将详细介绍如何使用Python爬取天气数据,并保存为结构化格式。我们将以中国天气网为例,讲解完整的爬虫实现过程。

一、准备工作
1.1 所需工具
Python 3.x

requests库(发送HTTP请求)

BeautifulSoup4(解析HTML)

pandas(数据处理)

lxml(解析器)

1.2 安装依赖库

pip install requests beautifulsoup4 pandas lxml

二、分析目标网站
我们以中国天气网(http://www.weather.com.cn)为例。首先需要分析网页结构:

打开中国天气网,搜索目标城市(如北京)

检查网页源代码,找到天气数据所在位置

分析URL规律,便于构造请求

三、基础爬取实现
3.1 获取网页内容

import requests
from bs4 import BeautifulSoup

def get_html(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()
        response.encoding = response.apparent_encoding
        return response.text
    except Exception as e:
        print(f"获取网页失败: {e}")
        return None

3.2 解析天气数据

def parse_weather(html):
    soup = BeautifulSoup(html, 'lxml')
    weather_data = []
    
    # 获取城市名称
    city = soup.find('div', class_='crumbs fl').find_all('a')[-1].text
    
    # 获取7天天气预报
    days = soup.find('div', id='7d').find('ul', class_='t clearfix').find_all('li')
    
    for day in days:
        date = day.find('h1').text
        weather = day.find('p', class_='wea').text
        temp = day.find('p', class_='tem')
        high_temp = temp.find('span').text
        low_temp = temp.find('i').text
        wind = day.find('p', class_='win').find('i').text
        
        weather_data.append({
            '城市': city,
            '日期': date,
            '天气': weather,
            '最高温度': high_temp,
            '最低温度': low_temp,
            '风力': wind
        })
    
    return weather_data

四、完整代码实现

import requests
from bs4 import BeautifulSoup
import pandas as pd

class WeatherSpider:
    def __init__(self):
        self.base_url = "http://www.weather.com.cn"
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
        }
    
    def get_city_code(self, city_name):
        """获取城市代码"""
        url = f"{self.base_url}/weather/"
        try:
            response = requests.get(url, headers=self.headers)
            soup = BeautifulSoup(response.text, 'lxml')
            city_link = soup.find('a', text=city_name)
            if city_link:
                return city_link['href'].split('/')[-1].replace('.shtml', '')
            return None
        except Exception as e:
            print(f"获取城市代码失败: {e}")
            return None
    
    def get_weather_data(self, city_code):
        """获取天气数据"""
        url = f"{self.base_url}/weather/{city_code}.shtml"
        html = self.get_html(url)
        if html:
            return self.parse_weather(html)
        return []
    
    def get_html(self, url):
        """获取网页内容"""
        try:
            response = requests.get(url, headers=self.headers)
            response.raise_for_status()
            response.encoding = response.apparent_encoding
            return response.text
        except Exception as e:
            print(f"获取网页失败: {e}")
            return None
    
    def parse_weather(self, html):
        """解析天气数据"""
        soup = BeautifulSoup(html, 'lxml')
        weather_data = []
        
        # 获取城市名称
        city = soup.find('div', class_='crumbs fl').find_all('a')[-1].text
        
        # 获取7天天气预报
        days = soup.find('div', id='7d').find('ul', class_='t clearfix').find_all('li')
        
        for day in days:
            date = day.find('h1').text
            weather = day.find('p', class_='wea').text
            temp = day.find('p', class_='tem')
            high_temp = temp.find('span').text if temp.find('span') else ''
            low_temp = temp.find('i').text if temp.find('i') else ''
            wind = day.find('p', class_='win').find('i').text if day.find('p', class_='win') else ''
            
            weather_data.append({
                '城市': city,
                '日期': date,
                '天气': weather,
                '最高温度': high_temp,
                '最低温度': low_temp,
                '风力': wind
            })
        
        return weather_data
    
    def save_to_csv(self, data, filename):
        """保存为CSV文件"""
        df = pd.DataFrame(data)
        df.to_csv(filename, index=False, encoding='utf_8_sig')
        print(f"数据已保存到 {filename}")

if __name__ == '__main__':
    spider = WeatherSpider()
    city_name = input("请输入城市名称: ")
    city_code = spider.get_city_code(city_name)
    if city_code:
        weather_data = spider.get_weather_data(city_code)
        if weather_data:
            spider.save_to_csv(weather_data, f"{city_name}_weather.csv")
        else:
            print("未获取到天气数据")
    else:
        print("未找到该城市")

五、进阶优化
5.1 使用多线程提高效率

from concurrent.futures import ThreadPoolExecutor

def multi_city_weather(cities):
    with ThreadPoolExecutor(max_workers=5) as executor:
        results = list(executor.map(get_single_city_weather, cities))
    all_data = [item for sublist in results for item in sublist]
    return all_data

5.2 添加异常处理

def safe_get_weather(city_code):
    try:
        return get_weather_data(city_code)
    except Exception as e:
        print(f"获取{city_code}天气数据时出错: {e}")
        return []

5.3 使用代理IP

proxies = {
    'http': 'http://your_proxy:port',
    'https': 'https://your_proxy:port'
}

response = requests.get(url, headers=headers, proxies=proxies)

六、数据存储与可视化
6.1 保存到数据库

import sqlite3

def save_to_db(data, db_name='weather.db'):
    conn = sqlite3.connect(db_name)
    cursor = conn.cursor()
    
    cursor.execute('''
    CREATE TABLE IF NOT EXISTS weather (
        city TEXT,
        date TEXT,
        weather TEXT,
        high_temp TEXT,
        low_temp TEXT,
        wind TEXT
    )
    ''')
    
    for item in data:
        cursor.execute(''
        INSERT INTO weather VALUES (?, ?, ?, ?, ?, ?)
        ''', (item['城市'], item['日期'], item['天气'], 
              item['最高温度'], item['最低温度'], item['风力']))
    
    conn.commit()
    conn.close()

6.2 使用Matplotlib可视化

import matplotlib.pyplot as plt

def plot_weather(data):
    dates = [item['日期'] for item in data]
    highs = [int(item['最高温度'].replace('℃', '')) for item in data]
    lows = [int(item['最低温度'].replace('℃', '')) for item in data]
    
    plt.figure(figsize=(10, 6))
    plt.plot(dates, highs, label='最高温度', marker='o')
    plt.plot(dates, lows, label='最低温度', marker='o')
    plt.xlabel('日期')
    plt.ylabel('温度(℃)')
    plt.title(f"{data[0]['城市']}7天天气预报")
    plt.legend()
    plt.grid()
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.show()

七:总结
本文详细介绍了使用Python爬取天气数据的完整流程,包括:

网页请求与响应处理

HTML解析与数据提取

数据存储与可视化

爬虫优化技巧

最后:
希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!

文末福利
最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。

包含编程资料、学习路线图、源代码、软件安装包等!【点击这里领取!】
① Python所有方向的学习路线图,清楚各个方向要学什么东西
② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例,学习不再是只会理论
④ 华为出品独家Python漫画教程,手机也能学习

在这里插入图片描述

如何用python爬取天气预报,python爬虫爬取天气数据 大家好,本文将围绕python爬虫爬取天气数据讲解展开说明,如何用python爬取天气预报是一个很多人都想弄明白的事情,想搞清楚python爬虫爬取天气数据需要先了解以下几个事情。天气预报我们每天都会关注,我们可以根据未来的天气增减衣物、安排出行,每天的气温、风速风向、相对湿度、空气质量等成为关注的焦点。 阅读详情

相关推荐

如何用python爬取天气预报,python爬虫爬取天气预报

Python获取天气数据涉及到网络请求和数据解析两个方面,而代理IP则可以帮助我们有效地应对一些反爬虫的网站。本文将介绍如何在Python中获取天气数据,并使用代理IP实现反爬虫python编程代码画哆啦a梦。本文介绍了Python获取天气数据的方法,并且演示了如何使用代理IP解决一些反爬虫的问题。通过本文的学习,读者可以了解到Python获取天气数据的基本原理和方法,在实际应用中也可以通过类似的方式获取其它类型的数据。

S1112_的博客 1328

Python爬虫-爬取天气信息(3)

本文接着Python爬虫-爬取天气信息(2),介绍如何爬取某地区的。

一只程序猿子的博客 1240

Python爬虫--爬取历史天气数据

写在前面:爬虫是老鼠屎在进入实验室后接触的第一个任务,当时刚刚接触代码的老鼠屎一下子迎来了地狱难度的爬微博签到数据。爬了一个多月毫无成果,所幸带我的师兄从未给我疾言厉色,他给与了我最大的包容与理解。尽管无功而返,但是那一个月也给了老鼠屎充足的学习时间,让老鼠屎对爬虫有了一点点的理解和执念。今天老鼠屎由于项目原因又需要爬天气数据,所以在这里把老鼠屎的一点经验写在这里,希望能给向曾经的我一样迷...

翻滚的老鼠屎 1万+

python 爬虫爬取天气

python 爬虫

Katherine1029的博客 1万+

用python爬取历史天气数据

某天气网站(www.数字.com)存有2011年至今的天气数据,有天看到一本爬虫教材提到了爬取这些数据的方法,学习之,并加以改进。 准备爬的历史天气 爬之前先分析url。左上有年份、月份的下拉选择框,按F12,进去看看能否找到真正的url: 54511-20161.js 很容易就找到了,左边是储存月度数据的js文件,右边是文件源代码,貌似json格式。 双击左边js文件,地址栏内出现...

huatmpa的博客 4621

Python可视化分析及爬取天气数据

天气预报我们每天都会关注,我们可以根据未来的天气增减衣物、安排出行,每天的气温、风速风向、相对湿度、空气质量等成为关注的焦点。本次使用python中requests和BeautifulSoup库对天气网当天和未来14天的数据进行爬取,保存为csv文件,之后用matplotlib、numpy、pandas对数据进行可视化处理和分析,得到温湿度度变化曲线、空气质量图、风向雷达图等结果,为获得未来天气信息提供了有效方法。 1、数据获取 请求网站链接 首先查看中国天气网的网址:http://www.wea..

IT教育任姐姐的博客 3747

Python爬取天气数据实战教程:从入门到精通

在数据获取与分析的时代,网络爬虫技术成为了数据采集的重要手段。本文将介绍如何使用Python爬取天气数据,并存储为结构化格式,适合数据分析、可视化等后续处理。本教程以中国天气网(http://www.weather.com.cn)为例,爬取城市天气预报数据。希望本教程能帮助你掌握Python爬取天气数据的基本技能,为进一步的数据分析项目打下基础。许多天气服务提供商提供API接口,比网页爬取更稳定可靠。requests库(发送HTTP请求)5.2 使用API获取天气数据(推荐)4.3 存储到数据库(可选)

Python_trys的博客 1607

不知道天气咋样?一起用Python爬取天气数据分析告诉你

今天我们分享一个小案例,获取天气数据,进行可视化分析,带你直观了解天气情况!总体来说,我们需要先对中国天气网中的天气数据进行爬取,保存为csv文件,并将这些数据进行可视化分析展示。拆解需求,大致可以整理出我们需要分为以下几步完成:首先我们需要获取各个城市的降雨数据,通过对中国天气网网址分析发现,城市的天气网址为:http://www.weather.com.cn/weather/101180101.shtml。根据对数据分析,返回的json格式数据,不难发现:网页结构我们上面已经分析好了,那么我们就可以来动

m0_67265464的博客 3665

【Python爬虫实战入门】:全球天气信息爬取

requests模块官方文档requests 是 Python 编程语言中一个常用的第三方库,它可以帮助我们向 HTTP 服务器发送各种类型的请求,并处理响应。向 Web 服务器发送 GET、POST 等请求方法;在请求中添加自定义标头(headers)、URL 参数、请求体等;自动处理 cookies;返回响应内容,并对其进行解码;处理重定向和跳转等操作;检查响应状态码以及请求所消耗的时间等信息。BeautifulSoup4模块官方文档。

书山有路勤为径,学海无涯苦作舟。 3668

[python爬虫]爬取天气网全国所有县市的天气数据

[python爬虫]爬取天气网全国所有县市的天气数据访问URL解析数据保存数据 所要用到的库 import requests from lxml import etree import xlwt 访问URL 这里我们要用xpath来解析数据,所以我们返回的网页数据格式为html 没学过xpath的可以看看这篇博客,写的还是很详细的 xpath链接 https://blog.youkuaiyun.com/u013332124/article/details/80621638 def ask_url(url): # 伪

Lee12138111的博客 3162

华大HC32F460从零到200MHz:手把手教你配置时钟系统(附避坑指南)

本文详细解析了华大HC32F460 MCU的时钟系统配置,从启动过程、时钟树分析到实战配置200MHz系统时钟。文章手把手指导开发者如何正确配置外部晶振、MPLL锁相环及总线分频,并提供了硬件检查、代码解读及常见问题排查的避坑指南,帮助用户从零构建稳定可靠的高性能时钟环境。

net55的博客 296

【爬虫实战】——Python爬取天气信息_天气数据爬虫数据

在数据分析和信息获取领域,天气数据是一个常见且重要的数据源。通过Python编程,我们可以高效地爬取天气数据,用于各种应用场景,如气象分析、旅行规划、农业决策等。Python提供了丰富的库和工具,使得这一过程变得相对简单。本文将介绍如何使用Python爬取天气数据,包括所需的库、API接口的选择、数据请求与解析等关键步骤。通过Python编程,我们可以高效地爬取天气数据,并将其用于各种应用场景。

2301_78150559的博客 1万+

在Keil下完成一个汇编程序的编写

在学习STM32的路上开始是学的C语言尚未进行对汇编进行学习,因此抽出时间来学习一下在keil下的汇编语言。

Liu-FE的博客 1万+

Python爬取天气数据及可视化分析!

天气预报我们每天都会关注,我们可以根据未来的天气增减衣物、安排出行,每天的气温、风速风向、相对湿度、空气质量等成为关注的焦点。本次使用python中requests和BeautifulSoup库对中国天气网当天和未来14天的数据进行爬取,保存为csv文件,之后用matplotlib、numpy、pandas对数据进行可视化处理和分析,得到温湿度度变化曲线、空气质量图、风向雷达图等结果,为获得未来天气信息提供了有效方法。

Python84310366的博客 8867

从零开始构建高精度称重系统:ADS1232硬件设计与软件调优实战

本文详细介绍了如何基于TI的ADS1232 24位ADC芯片构建高精度称重系统,涵盖硬件设计、软件调优及校准算法。通过优化电源设计、PCB布局和卡尔曼滤波算法,实现毫克级测量精度,适用于工业自动化和实验室等高要求场景。

weixin_28285943的博客 382

智慧杯 考试必备

2019.4. 强密码 描述 我们称一个密码是强密码,当且仅当它满足以下所有条件: 由 8 − 16 个字符组成 至少包含一个大写字母 (A-Z) 至少包含一个小写字母 (a-z) 至少包含一个数字 (0-9) 至少包含一个特殊符号 (! @ #$ % & * _ +) 娇娇发现她现在的密码好像不是强密码,请你帮她计算一下最少添加几个 字符可以变成强密码? 输入 输入仅一行,一个字符串,表示娇娇当前的密码 输出 输出一个数表示答案 如果不需要添加任何字符就已.

Fairy1208的博客 2861

python爬取天气预报数据,并实现数据可视化

python爬取天气预报数据,并实现数据可视化

一名在读学生 2万+

OpenClaw人人养虾:发现与传输

客户端需要先"发现"Gateway 的地址和端口,才能建立连接。OpenClaw 支持多种发现(Discovery)和传输(Transport)机制。

王国平的博客 572

用python爬取天气数据进行预测及可视化分析

天气预报我们每天都会关注,我们可以根据未来的天气增减衣物、安排出行,每天的气温、风速风向、相对湿度、空气质量等成为关注的焦点。本次使用python中requests和BeautifulSoup库对中国天气网当天和未来14天的数据进行爬取,保存为csv文件,之后用matplotlib、numpy、pandas对数据进行可视化处理和分析,得到温湿度度变化曲线、空气质量图、风向雷达图等结果,为获得未来天气信息提供了有效方法。

xzz_777c的博客 8349

大模型知识边界探索:LLM设计的极限测试

最优化理论是数学中的一个分支,主要研究如何从给定的一组约束条件下找到最优解。目标函数:定义了需要优化的指标,可以是最大化或最小化。约束条件:定义了在优化过程中需要满足的限制条件。无约束优化:目标函数和约束条件都不存在。有约束优化:目标函数存在,但存在约束条件。多目标优化:同时需要优化多个目标函数。极限测试(Ultimate Test)是一种系统性的方法,用于评估大型模型(如LLM)在极端条件下的性能和稳定性。极端数据分布:与模型训练数据分布显著不同的数据集。极端计算资源。

AI天才研究院 432

OmniDrive(2):环境搭建

项目中使用的是全量的数据集(full dataset v1.0), 数据量比较大,训练验证(trainval) + test 总计200多G的数据,单独一个个下载会比较慢。参数,否则安装的时候会自动卸载已安装好的torch,重新安装最新版本的torch,这是不允许的。在cuDNN官网下载,默认下载的是最新版本的cuDNN,我们这里点击。,== 博文中详细介绍了完整的cuda和cudnn的安装过程==分析: 这是因为yapf 安装的版本不对,需要安装特定的版本。出现训练的loss变化,就说明可以正常训练了。

@bangbang的博客 623

python爬取天气数据

说明:寒假任务是做一个带UI界面的天气预报软件,先上最终结果图。 其中用到的知识有:python网络爬虫、python的xlwt和xlwd库的使用,PyQt5的使用。 这里分享一下完成过程: 制作UI界面前先获取城市天气数据 一.爬取天气数据(有网) 第一步:找到合适的url链接 第二步:用python的urllib2库爬取对应城市的天气数据。 第三步:打印天气数据 有了思路,开始打代码: im...

Henry41132220011的博客 5819

在 Fiori Elements Object Page 的表格中用 UI.Hidden 隐藏列:语义、边界与落地实践全解析

摘要: Fiori Elements的Object Page表格中,UI.Hidden注解支持静态和动态隐藏列。动态隐藏分为两种:基于父实体属性隐藏整列,或基于子实体属性按行隐藏单元格。关键约束包括:支持服务端操作的列禁止使用动态隐藏,否则会导致UX不一致。ABAP CDS不支持路径式UI.Hidden,需改用XML注解。该功能需与UI.Importance、个性化等机制明确区分,避免混淆。对于可能参与排序/过滤的列,建议仅使用静态隐藏。实际应用中需注意注解位置(整列或单元格级)和业务场景的匹配。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 205

Python爬取天气数据,并且进行天气预报(已实现)

利用爬虫爬取天气数据,并且进行数据清理,之后进行模型预测,预测明天气温 还进行了数据图的绘制。

qq_50847752的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Pathon爬取2345天气网天气数据

Python 爬取2345天气网数据,并对解析错误的数据进行修复处理。 用到的库:Requests,BeautifulSoup,Pandas.

6437

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Python爬虫实战-爬取历史天气数据

最近项目需要对合肥市历史天气数据进行爬取,分析了几个天气数据网站,最终选择天气后报网站. 将实现过程遇到的问题以及下来,供以后参考。 步骤分析 这里我使用的是Python中的requests库BeautifulSoup库进行爬取,自己在实现的过程中主要可分为以下几个大步骤。 1.熟悉requests库和BeautifulSoup的使用: requests主要是与HTTP请求相关的库,在我们的爬虫中...

litexy 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: Pandas核心数据结构与数据导入导出完全指南
下一篇: Python进阶常用技巧:提升开发效率的20个实用方法
Python_trys
博客等级 码龄2年 4369粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值