文章目录
一、先来唠唠嗑(为什么要学这个?)
兄弟们!最近我发现好多刚入门Python的小伙伴都在问:“学爬虫到底有什么用啊?”(灵魂发问)今天就拿天气数据抓取这个典型案例,带你们感受爬虫技术的魅力!想象一下:自动获取全国365天的温度变化,还能生成酷炫的可视化图表,这不比手动查天气预报香多了?
二、战前准备(工具备齐才能开干)
2.1 必备三件套
- requests库:网络请求界的扛把子
pip install requests
- BeautifulSoup4:HTML解析神器
pip install beautifulsoup4
- pandas库:数据处理专家
pip install pandas
2.2 选个靠谱的网站
这里以中国天气网为例(注意:抓取前请查看网站robots.txt文件),咱们的目标是抓取指定城市的实时天气数据。悄悄说:其实很多政府类网站的数据都是公开可用的哦~
三、手把手实战环节(代码逐行解析)
3.1 解剖网页结构(开发者工具YYDS)
按F12打开开发者工具,在元素面板里翻找(就像在衣柜里找袜子),你会发现天气数据都藏在<div class="today">
这个容器里,温度数据在<span class="tem">
标签中。
3.2 上代码!(建议跟着敲一遍)
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 伪装成浏览器访问(重要!防反爬)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...'
}
def get_weather(city_code):
url = f'http://www.weather.com.cn/weather/{city_code}.shtml'
response = requests.get(url, headers=headers)
response.encoding = 'utf-8' # 解决中文乱码
soup = BeautifulSoup(response.text, 'html.parser')
weather_list = []
# 定位到天气数据所在的div
for item in soup.select('.t > ul li'):
date = item.select('h1')[0].text
weather = item.select('.wea')[0].text
temp = item.select('.tem')[0].text.strip()
weather_list.append([date, weather, temp])
return pd.DataFrame(weather_list, columns=['日期', '天气', '温度'])
# 示例:北京的城市代码是101010100
df = get_weather('101010100')
df.to_csv('北京天气.csv', index=False)
print('数据已保存!快去看文件吧~')
3.3 避坑指南(血泪经验)
- 遇到403错误?赶紧检查User-Agent是不是最新的
- 数据抓取不全?可能是网站改版了,得重新分析HTML结构
- 推荐加个
time.sleep(3)
,做人不要太贪婪(防止被封IP)
四、数据可视化(让数字会说话)
4.1 温度折线图
import matplotlib.pyplot as plt
# 处理温度数据(去掉℃符号)
df['最高温'] = df['温度'].str.split('/').str[0].str.replace('℃','').astype(int)
plt.plot(df['日期'], df['最高温'], marker='o')
plt.title('北京近期温度变化')
plt.xticks(rotation=45)
plt.show()
4.2 高级玩法:用pyecharts做动态图表
from pyecharts.charts import Line
line = Line()
line.add_xaxis(df['日期'].tolist())
line.add_yaxis("最高温度", df['最高温'].tolist())
line.render("weather.html") # 生成可交互的网页图表
五、重要注意事项(必看!)
- 合法合规第一条:每天抓取次数控制在20次以内,别把人家网站搞崩了
- 定时更新策略:建议设置每天凌晨自动运行(Windows可以用任务计划程序)
- 数据清洗技巧:遇到"霾转晴"这种复合天气,可以用
.split()
分割处理 - 异常处理机制:一定要加try-except,网络请求失败时自动重试
六、还能怎么玩?(扩展思路)
- 抓取多个城市数据做对比分析
- 结合历史数据预测未来天气
- 接入短信API做异常天气预警
- 开发微信小程序查询接口
七、最后说两句
爬虫就像一把瑞士军刀,用好了能解锁各种神奇操作!但千万记住:咱们只抓取公开可用数据,别碰用户隐私和敏感信息。建议新手从政府公开数据平台(比如国家统计局网站)开始练手,既安全又有价值~
(实操时遇到问题?欢迎在评论区交流~ 但注意不要留任何联系方式哦)