手把手教你用Python爬取天气数据(附可视化技巧)

一、前言:爬虫其实可以很简单!

最近后台收到好多小伙伴私信:“天气数据怎么爬?”、“网页结构看不懂怎么办?”(挠头.jpg)今天就给各位老铁安排一个超实用的天气数据爬取教程!不需要高深的技术,只要会点Python基础就能上手,还能把数据变成酷炫的图表,你懂的~(文末有完整代码)

二、准备工作:别急着写代码!

2.1 选对目标网站很重要!

这里推荐中国天气网(www.weather.com.cn)作为数据源,毕竟官方数据靠谱又稳定。不过要注意看网站的robots.txt文件(在网站地址后加/robots.txt就能看到),确认允许爬取的目录。

2.2 必备工具三件套

安装这三个库就能开工:

pip install requests  # 网页请求神器
pip install beautifulsoup4  # 解析HTML小能手
pip install pyecharts  # 可视化大杀器

三、实战环节:爬虫五步走!

3.1 分析网页结构(关键!)

按F12打开开发者工具,发现北京天气的URL是:

http://www.weather.com.cn/weather/101010100.shtml

观察DOM树发现,每天的天气数据都在<li class="sky">标签里。这里有个坑:class名称可能会变,建议用正则表达式匹配!

3.2 发送HTTP请求

import requests

url = 'http://www.weather.com.cn/weather/101010100.shtml'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}

response = requests.get(url, headers=headers)
response.encoding = 'utf-8'  # 防止中文乱码

3.3 解析HTML数据

用BeautifulSoup提取关键信息:

from bs4 import BeautifulSoup

soup = BeautifulSoup(response.text, 'html.parser')
weather_list = soup.find_all('li', class_='sky')

for item in weather_list:
    date = item.find('h1').text
    temp = item.find('p', class_='tem').text.replace('\n', '')
    print(f'{date}: {temp}')

3.4 数据存储(两种方案)

方案一:CSV文件

import csv

with open('weather.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['日期', '温度', '天气'])
    # 写入数据...

方案二:MySQL数据库(适合大量数据)

import pymysql

conn = pymysql.connect(host='localhost', user='root', password='123456', db='weather')
cursor = conn.cursor()
sql = "INSERT INTO data (date, temp) VALUES (%s, %s)"
# 执行插入操作...

3.5 数据可视化(超酷炫!)

使用pyecharts生成交互式图表:

from pyecharts.charts import Line

line = Line()
line.add_xaxis(dates)  # X轴日期
line.add_yaxis("最高温度", max_temps)
line.add_yaxis("最低温度", min_temps)
line.render("weather.html")  # 生成网页版图表

四、避坑指南(血泪经验!)

  1. 反爬机制破解:遇到403错误?试试:

    • 添加Referer请求头
    • 使用代理IP池(推荐快代理等付费服务)
    • 降低请求频率(加time.sleep(2))
  2. 数据清洗小技巧

    # 去除空白字符
    text = '  25℃~30℃  '.strip() 
    # 正则提取温度
    import re
    temps = re.findall(r'\d+', text)  # 得到['25', '30']
    
  3. 定时任务设置(每天自动爬):

    import schedule
    import time
    
    def job():
        print("开始爬取数据...")
        
    schedule.every().day.at("08:00").do(job)
    while True:
        schedule.run_pending()
        time.sleep(1)
    

五、扩展应用:数据还能这么玩!

  • 结合历史数据做趋势预测(试试ARIMA模型)
  • 制作天气预警机器人(用SMTP发邮件提醒)
  • 开发微信小程序展示数据(Flask+UniApp)

六、写在最后

爬虫就像钓鱼,耐心和技巧缺一不可!记得遵守《网络安全法》,别碰敏感数据。遇到问题多查文档(官方文档永远是最好的老师),也可以去GitHub找现成项目参考。

完整代码已上传Github(搜索weather-spider),需要的小伙伴自取~ 下期想学什么?评论区告诉我!(比心)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值