文章目录
一、先看成果再动手
先给各位看看咱们今天要实现的酷炫效果(划重点):
- 实时获取指定城市7天天气预报 🌤️
- 自动生成温度变化折线图 📈
- 生成降雨概率柱状图 📊
- 数据保存为CSV文件 💾
(小白友好警告)别被这些专业名词吓到!跟着我的步骤操作,包你半小时搞定!
二、准备工作:安装必备工具包
打开你的cmd/终端,输入以下命令:
pip install requests beautifulsoup4 pandas matplotlib
(重要提示)如果遇到安装失败,试试加上清华镜像源:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名
三、实战开始:手把手写代码
3.1 锁定目标网站
本次选用「中国天气网」作为数据源(网址:www.weather.com.cn)。打开网站后按F12打开开发者工具,重点观察这两个地方:
- 网页请求的Headers信息
- HTML标签结构(特别是class名称)
(防坑指南)很多网站的class名会定期更换,如果运行失败记得重新检查!
3.2 核心爬虫代码
import requests
from bs4 import BeautifulSoup
import pandas as pd
def get_weather(city_code):
url = f"http://www.weather.com.cn/weather/{city_code}.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'
soup = BeautifulSoup(response.text, 'html.parser')
weather_list = soup.find('ul', class_='t clearfix').find_all('li')
data = []
for day in weather_list[:7]: # 取7天数据
date = day.find('h1').text
weather = day.find('p', class_='wea').text
temp = day.find('p', class_='tem').text.strip()
wind = day.find('p', class_='win').find('i').text
data.append([date, weather, temp, wind])
df = pd.DataFrame(data, columns=['日期', '天气', '温度', '风向'])
return df
# 使用示例(北京的城市代码是101010100)
weather_data = get_weather('101010100')
print(weather_data.head())
3.3 可视化模块
加上这几行代码,瞬间让数据会说话:
import matplotlib.pyplot as plt
# 温度变化折线图
plt.figure(figsize=(10,6))
weather_data['温度'].str.extract('(\d+)').astype(int).plot(
kind='line',
marker='o',
color='#FF6B6B'
)
plt.title('未来一周温度变化趋势', fontsize=14)
plt.xlabel('日期')
plt.ylabel('温度(℃)')
plt.grid(True, linestyle='--')
plt.savefig('temperature.png')
四、你可能遇到的坑(血泪经验总结)
4.1 网站反爬机制
如果遇到403错误,试试这些招数:
- 更换User-Agent头
- 添加请求间隔时间(time.sleep(2))
- 使用代理IP(进阶操作)
4.2 数据解析异常
当发现数据错乱时:
- 检查网页结构是否变化
- 用print(soup.prettify())输出网页结构
- 使用更精准的CSS选择器
4.3 编码问题
遇到乱码记得:
response.encoding = 'utf-8' # 或者 'gbk'
五、项目升级思路(举一反三)
5.1 扩展功能
- 添加邮件自动发送功能 📧
- 接入短信通知API 📱
- 开发可视化网页版 🌐
5.2 数据应用
- 结合历史天气数据分析季节变化
- 制作旅游城市天气对比报告
- 开发穿衣推荐系统 👗
六、法律与道德提示(超级重要)
- 控制请求频率(建议≥30秒/次)
- 不要用于商业用途
- 尊重网站的robots.txt协议
- 避免对服务器造成压力
(求生欲声明)本教程仅用于学习交流,请勿滥用!
七、完整源码获取
关注公众号「Python大本营」,回复「天气爬虫」获取完整可运行代码包。包含:
- 多城市支持版本
- 可视化增强版
- 异常处理优化版
(彩蛋)源码中还藏着一个神秘功能——空气质量指数分析!等你来解锁~
八、常见问题QA
Q:为什么我的爬虫突然不能用了?
A:大概率是网站改版了,需要重新分析页面结构
Q:如何获取其他城市代码?
A:访问中国天气网,搜索城市后看地址栏数字
Q:数据可以保存到数据库吗?
A:当然!用pandas的to_sql()方法轻松实现
下次想看什么爬虫案例?留言告诉我!点赞过1000马上出【B站弹幕抓取与词云生成】教程!