手把手教你用Python抓取全国天气数据(附完整代码)!!!

朋友们好呀!今天咱们来玩点有意思的——用Python爬虫抓取天气数据!是不是经常看到别人做数据分析很酷炫?其实只要掌握基础爬虫技能,你也能轻松获取各种数据(比如天气数据)做自己的分析项目!💪

一、准备工作(超级重要!!!)

1.1 装好这些工具再开车

# 终端里啪啪敲这些命令
pip install requests beautifulsoup4 pandas

这三个库各司其职:

  • requests:网络请求界的劳模(负责跟网站打交道)
  • beautifulsoup4:HTML解析小能手(把网页大卸八块找数据)
  • pandas:数据处理扛把子(整理数据的好帮手)

1.2 选个靠谱数据源

这里用「中国天气网」举个栗子🌰,咱们要抓的是北京最近7天的天气预报:

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

(注意!!!先看看网站的robots.txt,确认允许爬取再动手)

二、实战环节(代码警告⚠️)

2.1 发起网络请求

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 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}

response = requests.get(url, headers=headers)
response.encoding = 'utf-8'  # 解决中文乱码的神操作

这里有个坑要注意❗️很多网站会屏蔽没有User-Agent的请求,所以咱们要伪装成浏览器访问。

2.2 解析网页结构

按F12打开开发者工具,发现天气数据藏在<ul class="t clearfix">这个标签里:

from bs4 import BeautifulSoup

soup = BeautifulSoup(response.text, 'html.parser')
weather_list = soup.find('ul', class_='t clearfix').find_all('li')

2.3 提取关键数据

来看怎么从每个<li>标签里抠出想要的信息:

weather_data = []
for day in weather_list:
    date = day.find('h1').text
    weather = day.find('p', class_='wea').text
    temp = day.find('p', class_='tem').text.replace('\n', '')
    wind = day.find('p', class_='win').find('i').text
    
    weather_data.append({
        '日期': date,
        '天气状况': weather,
        '温度': temp,
        '风力': wind
    })

(小技巧)遇到数据里有乱七八糟的换行符?直接.replace('\n', '')一键清理!

三、数据存储与展示

3.1 用Pandas存为Excel

import pandas as pd

df = pd.DataFrame(weather_data)
df.to_excel('北京天气.xlsx', index=False)
print("数据已保存!快去看excel文件吧~")

3.2 简单可视化

用Matplotlib画个温度变化折线图:

import matplotlib.pyplot as plt

# 处理温度数据(把"21/15℃"拆分成最高温和最低温)
df['最高温'] = df['温度'].apply(lambda x: int(x.split('/')[0].replace('℃', '')))
df['最低温'] = df['温度'].apply(lambda x: int(x.split('/')[1].replace('℃', '')))

plt.figure(figsize=(10,6))
plt.plot(df['日期'], df['最高温'], label='最高温度', marker='o')
plt.plot(df['日期'], df['最低温'], label='最低温度', marker='*')
plt.title('北京未来7天温度变化')
plt.xlabel('日期')
plt.ylabel('温度(℃)')
plt.legend()
plt.grid(True)
plt.show()

四、常见翻车现场(避坑指南)

4.1 网站反爬怎么办?

  • 随机User-Agent:用fake_useragent库生成不同浏览器标识
  • 代理IP池:防止IP被封的终极武器
  • 请求频率控制:别像个DDOS攻击一样疯狂请求

4.2 数据突然抓不到了?

很多网站会改版页面结构!这时候要:

  1. 重新F12检查元素
  2. 更新CSS选择器路径
  3. 加try-except异常处理

4.3 中文乱码疑难杂症

遇到火星文?试试这些组合拳:

response.encoding = 'gbk'  # 有些网站用老编码
response.encoding = response.apparent_encoding  # 自动检测编码

五、还能玩出什么花样?

抓完数据只是开始!你可以:

  • 做全国主要城市天气对比
  • 分析历史天气变化趋势
  • 结合空气质量数据做健康建议
  • 开发微信天气提醒机器人

(举个栗子)用Pyecharts做个动态可视化大屏,绝对惊艳朋友圈!

六、说点掏心窝子的话

刚开始学爬虫时,我也经常被反爬机制虐到怀疑人生😭。但坚持下来后发现,解决问题的过程才是最爽的!记住几个原则:

  1. 遵纪守法别瞎搞(重要的事情说三遍)
  2. 多看网站源码结构
  3. 善用开发者工具
  4. 多写注释方便debug

最后送大家一句话:爬虫不是目的,用数据创造价值才是王道!下次想看我写什么爬虫案例?评论区留言安排~ 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值