文章目录
朋友们好呀!今天咱们来玩点有意思的——用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 数据突然抓不到了?
很多网站会改版页面结构!这时候要:
- 重新F12检查元素
- 更新CSS选择器路径
- 加try-except异常处理
4.3 中文乱码疑难杂症
遇到火星文?试试这些组合拳:
response.encoding = 'gbk' # 有些网站用老编码
response.encoding = response.apparent_encoding # 自动检测编码
五、还能玩出什么花样?
抓完数据只是开始!你可以:
- 做全国主要城市天气对比
- 分析历史天气变化趋势
- 结合空气质量数据做健康建议
- 开发微信天气提醒机器人
(举个栗子)用Pyecharts做个动态可视化大屏,绝对惊艳朋友圈!
六、说点掏心窝子的话
刚开始学爬虫时,我也经常被反爬机制虐到怀疑人生😭。但坚持下来后发现,解决问题的过程才是最爽的!记住几个原则:
- 遵纪守法别瞎搞(重要的事情说三遍)
- 多看网站源码结构
- 善用开发者工具
- 多写注释方便debug
最后送大家一句话:爬虫不是目的,用数据创造价值才是王道!下次想看我写什么爬虫案例?评论区留言安排~ 🚀