文章目录
前言:天气数据里的秘密
你是不是也好奇过不同城市的温差变化?(举个栗子🌰)最近帮朋友做商业选址分析,发现天气数据才是选址的隐藏大佬!今天咱们就用Python来挖一挖这个宝藏,全程保姆级教程,小白也能轻松上车!
一、前期准备(工具包别装错!)
1.1 三剑客安装
打开你的终端/cmd,三行代码搞定基础环境:
pip install requests # 网络请求神器(必装!)
pip install bs4 # 网页解析利器(别漏装!)
pip install pandas # 数据处理专家(后期有大用)
1.2 目标网站分析
咱们以「中国天气网」为例(官网地址自己搜),按F12打开开发者工具,重点看这两个地方:
- Network面板里的XHR请求(藏着真正的数据接口)
- Elements面板的HTML结构(找数据存放位置)
关键发现:天气数据实际是通过Ajax动态加载的,直接找接口比解析HTML更高效!(划重点)
二、实战代码分解(跟着敲就对了)
2.1 伪装浏览器请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Referer': 'http://www.weather.com.cn/'
}
注意:这个User-Agent已经处理过隐私信息,实际使用时建议更新为最新版本(右键浏览器-检查-网络请求里复制)
2.2 构造请求参数
以北京为例:
params = {
'areaid': '101010100', # 城市编码表我放文末
'type': 'forecast',
'date': '20231120'
}
2.3 发送请求+解析数据
import requests
from bs4 import BeautifulSoup
response = requests.get(
url='http://d1.weather.com.cn/dingzhi/101010100.html',
headers=headers,
params=params
)
response.encoding = 'utf-8' # 解决中文乱码问题
data = response.json() # 直接转json格式
三、数据清洗技巧(避坑指南)
3.1 异常值处理
遇到温度数据出现"999"这样的离谱值?用pandas轻松过滤:
import pandas as pd
df = pd.DataFrame(data['data'])
df = df[df['temp'].between(-50, 50)] # 过滤异常温度
3.2 时间格式转换
原始数据的时间戳看着头疼?试试这个:
df['date'] = pd.to_datetime(df['date'], unit='ms') # 毫秒转日期
四、可视化炫技时刻
4.1 折线图绘制
import matplotlib.pyplot as plt
plt.style.use('ggplot') # 启用高级样式
df.plot(x='date', y='temp', kind='line')
plt.title('北京近一周温度变化')
plt.savefig('weather.png', dpi=300) # 保存高清图
4.2 温度分布图
import seaborn as sns
sns.kdeplot(df['temp'], shade=True)
plt.xlabel('温度区间')
plt.ylabel('出现概率')
五、实战经验分享(血泪教训)
5.1 反爬破解思路
- 随机延时设置:
time.sleep(random.uniform(1,3))
- 代理IP池搭建(需要另购服务)
- 请求头轮换策略(准备多个UA轮流用)
5.2 数据存储方案
推荐MongoDB存储非结构化数据:
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client['weather_db']
collection = db['beijing']
collection.insert_many(df.to_dict('records'))
六、城市编码表(私藏资源)
城市 | 编码 |
---|---|
北京 | 101010100 |
上海 | 101020100 |
广州 | 101280101 |
深圳 | 101280601 |
… | … |
(完整表格约2000+城市编码,需要的同学评论区留言~)
结语:爬虫的正确打开方式
虽然咱们今天实现了天气数据抓取,但切记遵守这两个原则:
- 控制请求频率(别把人家服务器搞崩了)
- 遵守robots协议(在网址后加/robots.txt查看)
下次想看我扒哪个网站的数据?评论区告诉我!(悄悄说:电商价格监控系统已经在做了)