# 统计数据
1. 累年的各月极端气温(最高和最低气温)
2. 累年来的各月平均降水量
3. 累年来的各月最大降水量
4. 累年来的各月平均气氛、平均最高低温
5. 累年来的各月平均气温
天气词条分析:
- 词云显示
- 柱状图显示
- 饼图分布显示
![image-20231228155127197](./.assets/Python%E5%A4%A7%E4%BD%9C%E4%B8%9A/image-20231228155127197.png)
风向:
![image-20231228155039520](./.assets/Python%E5%A4%A7%E4%BD%9C%E4%B8%9A/image-20231228155039520.png)
温湿度分析
![image-20231228155238210](./.assets/Python%E5%A4%A7%E4%BD%9C%E4%B8%9A/image-20231228155238210.png)
实况最高温度比较
![image-20231228160330734](./.assets/Python%E5%A4%A7%E4%BD%9C%E4%B8%9A/image-20231228160330734.png)
# 爬取网站
http://www.weather.com.cn/weather1d
天气预报的数据
- 温度,天气、风级、湿度
实时和预报
# 流程
## 爬虫
首先要确定要爬取什么数据:
- 哪些城市的数据:每个省下面的市级城市
- 什么时间的数据:历史数据以及当前时间的数据,还有7天预测的数据
- 爬取什么数据:温度、风向、天气描述
https://tianqi.2345.com/wea_history/:用于爬取历史数据
http://www.weather.com.cn/:用于爬取当前数据以及未来7天的数据
### 城市关系
https://tianqi.2345.com/tqpcimg/tianqiimg/theme4/js/citySelectData2.js可以获取所有市级城市
https://tianqi.2345.com/tqpcimg/tianqiimg/theme4/js/global.js?v=20220613可以获取所有省级城市
通过解析上面两个文件来构建城市
- 将爬取到的数据保存到redis中,确保仅爬取一次!
保存到 redis 的格式为:(前缀为 `city:info:_id`)
1. 第一种
- `key`:城市中文名
- `value`:对应的id
2. 第二种
- `key`:城市的id
- `value`:对应的中文名
除了上面,还需要记录省和其城市映射关系,使用 `hash` 结构保存:(前缀为 `city:info:relation`)
- `key`:省名
- `value`:其附属市级城市的集合
- 映射关系:
- field市级城市
- value省级城市
### 城市id
实时数据爬取需要城市对应的id,因此需要上面拿到了市级城市然后再获取其api
使用 Redis 缓存城市之间的id
通过爬取 https://j.i8tq.com/weather2020/search/city.js 该网页的数据进行设置
保存到 redis 的格式为:
- key:城市的中文名、拼音(前缀为`city:info:id`
- value:城市的id
### 准备爬取工作
就是爬取上面的拼音信息和城市id数据,
我们需要设置一个值,表示城市数据是否已经爬取
- 0为数据还没有进行爬取
- 2为id数据已经爬取
`WrapRedisSpider` 用于执行前置工作,每个继承其的子类都需要在 `start_requests` 中调用其父类的 `start_prepare` 方法,开始进行准备工作:
- 首先会从redis中读取对应的状态值,是否有爬虫正在获取爬虫信息,保证更新工作仅有一个人完成
- 然后从redis读取城市数据是否已经爬取的状态,然后根据状态值来爬取不同的数据
### 实时数据爬取
以 http://www.weather.com.cn/weather1d/101300501.shtml 为例
观察网站响应,一开始返回的html并不是最终的显示效果,就说明部分数据是动态加载的
打开开发者工具中的网络,过滤出Fetch/XHR类型请求,发现并没有相关数据的请求,可以得知部分代码应该是js代码,但是是从不同的文件中返回的
过滤出js代码的请求,查看各个js文件,果然发现部分的数据是在js文件中,所需要的数据分别是
- http://d1.weather.com.cn/sk_2d/101300501.html?_=1704000321000
```js
var dataSK = {
"nameen": "guilin", // 拼音
"cityname": "桂林",
"city": "101300501", // id
"temp": "20.3", // 当前摄氏度
"tempf": "68.5", // 当前华氏度
"WD": "北风", // 风向
"wde": "N", // 风向
"WS": "3级", // 风等级
"wse": "12km\/h", // 风速
"SD": "50%", // 相对湿度
"sd": "50%",
"qy": "1000",
"njd": "3km",
"time": "13:10", // 该数据的时间
"rain": "0", // 降雨量
"rain24h": "0", // 降雨量
"aqi": "156", // 空气质量
"aqi_pm25": "156",
"weather": "霾", // 天气描述
"weathere": "haze",
"weathercode": "d53",
"limitnumber": "",
"date": "12月31日(星期日)"
}
```
- http://d1.weather.com.cn/dingzhi/101300501.html?_=1704000321000
```js
var cityDZ101300501 = {
"weatherinfo": {
"city": "101300501", // 城市id
"cityname": "桂林",
"fctime": "202312311100", // 数据来源时间
"temp": "21℃", // 白天温度
"tempn": "11℃", // 黑夜温度
"weather": "多云转小雨", // 当前天气描述
"weathercode": "d1",
"weathercoden": "n7",
"wd": "北风", // 风向
"ws": "<3级" // 风速
}
};
var alarmDZ101300501 = {
"w": []
}
```
除了上面的js数据,网页中还存在部分数据:
<img src="./.assets/Python%E5%A4%A7%E4%BD%9C%E4%B8%9A/image-20231231134414618.png" alt="image-20231231134414618" style="zoom:50%;" />
<img src="./.assets/Python%E5%A4%A7%E4%BD%9C%E4%B8%9A/image-20231231134427462.png" alt="image-20231231134427462" style="zoom:50%;" />
- 白天和晚上天气描述、温度、风级
- 日出日落时间
- 当前的贴心提醒
- 图表数据:最近24小时的历史温度记录、风向记录、湿度记录
```js
var observe24h_data = {
od: {
od0: "202312311200",
od1: "桂林",
od2: [
{
od21: "12", // 时间整点
od22: "18.8", // 温度
od23: "13", //
od24: "北风", // 风向
od25: "3", // 风级
od26: "0", // 降雨量
od27: "54", // 湿度%
od28: "", // 空气质量
},
{
od21: "11",
od22: "18.1",
od23: "13",
od24: "北风",
od25: "2",
od26: "0",
od27: "58",
od28: "148",
},
```
确定爬取数据:
- 当前日期的温度值 temp (单位摄氏度)
- 当前风向 w_direction (N、W...)
- 当前风等级w_level()
- 当前相对湿度 humidity
- 当前风速 w_speed
- 此数据的时间 timestamp
- 降雨量当前 rain
- 24小时降雨量 rain24h
- 空气质量 aqi
- 天气描述词 description
`Scrapy` 框架中的items.py中有 `RealWeatherItem` 类,结构就是爬取的数据
> Item组件就是用于存储爬取数据的结构(类似字典)
`Spider` 组件是负责获取url并解析响应体的内容
- `RealHistorySpider` 是用于获取实时天气
- 执行过程:
- 先判断城市数据是否存在,不存在则进行爬取
- 爬取网页数据
- 获取http://d1.weather.com.cn/dingzhi解析
- 获取http://d1.weather.com.cn/sk_2d/ 解析
- 之间的数据传递使用 Request的meta实现
- 最后生成 `RealItem` 传递给 pipeline
> Pipeline组件负责接收Item实例,将其保存到外部存储或者别的处理
----
### 历史天气爬�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于python的网络爬虫爬取天气数据及可视化分析python大作业(源码+文档说明)高分项目,高分项目期末大作业开发的97分高分设计项目,可作为高分课程设计和期末大作业的参考,含有代码注释小白也可看的懂,有能力的小伙伴也可以在此基础上进行二开,项目代码完整下载即可运行。 基于python的网络爬虫爬取天气数据及可视化分析python大作业(源码+文档说明)高分项目,高分项目期末大作业开发的97分高分设计项目,可作为高分课程设计和期末大作业的参考,含有代码注释小白也可看的懂,有能力的小伙伴也可以在此基础上进行二开,项目代码完整下载即可运行。 基于python的网络爬虫爬取天气数据及可视化分析python大作业(源码+文档说明)高分项目,高分项目期末大作业开发的97分高分设计项目,可作为高分课程设计和期末大作业的参考,含有代码注释小白也可看的懂,有能力的小伙伴也可以在此基础上进行二开,项目代码完整下载即可运行。 基于python的网络爬虫爬取天气数据及可视化分析python大作业(源码+文档说明)高分项目,高分项目期末大作业开发的97分高分设计项目,可作为高分课程设计和期末大作业的
资源推荐
资源详情
资源评论
收起资源包目录
基于python的网络爬虫爬取天气数据及可视化分析python大作业.zip (90个子文件)
weather-analyze-main
weather-web
.vscode
extensions.json 75B
src
App.vue 525B
assets
main.css 492B
logo.svg 276B
base.css 2KB
main.js 529B
api
api.js 439B
utils
request.js 2KB
message.js 944B
common
constants.js 226B
stores
CityInfo.js 482B
router
index.js 1KB
views
detail
Chart.vue 8KB
real.vue 7KB
index.vue 2KB
history.vue 2KB
404.vue 7KB
home
index.vue 1KB
Home.vue 282B
jsconfig.json 116B
vite.config.js 1KB
package.json 567B
public
favicon.ico 4KB
package-lock.json 167KB
index.html 840B
.gitignore 317B
README.md 635B
weather-spark
__init__.py 0B
datatype.py 2KB
main.py 82B
analyze.py 2KB
data_store.py 5KB
weather-backend
__init__.py 0B
weather
__init__.py 0B
wsgi.py 391B
urls.py 1000B
settings.py 4KB
asgi.py 391B
api
__init__.py 0B
tests.py 60B
admin.py 202B
migrations
__init__.py 0B
0002_rename_historyweatheritem_historydata.py 330B
0003_alter_realdata_content_alter_realdata_rain_and_more.py 848B
0001_initial.py 2KB
0004_alter_historydata_aqi_alter_historydata_aqi_status_and_more.py 759B
0005_alter_historydata_city_id.py 427B
0006_alter_realdata_d_temp_alter_realdata_n_temp_and_more.py 1KB
0007_alter_realdata_w_level.py 407B
apps.py 138B
models.py 2KB
urls.py 463B
views.py 3KB
manage.py 663B
.assets
Python大作业
image-20231228155039520.png 176KB
image-20240102094558481.png 9KB
image-20231231134427462.png 58KB
image-20231231134414618.png 21KB
image-20231228155238210.png 127KB
image-20231228160330734.png 24KB
image-20231228155127197.png 66KB
scrapy.cfg 271B
utils
__init__.py 0B
spark_utils.py 2KB
hbase_utils.py 5KB
kafka_utils.py 4KB
redis_utils.py 10KB
.gitignore 46B
weather_scrapy
__init__.py 0B
pipelines.py 2KB
main.py 1KB
spiders
WrappedRedisSpider.py 7KB
__init__.py 161B
HistorySpider.py 6KB
ForcastSpider.py 662B
__pycache__
RealWeatherSpider.cpython-310.pyc 6KB
WrappedRedisSpider.cpython-310.pyc 6KB
__init__.cpython-310.pyc 160B
RealWeatherSpider.py 7KB
items.py 2KB
settings.py 7KB
__pycache__
middlewares.cpython-310.pyc 5KB
__init__.cpython-310.pyc 152B
settings.cpython-310.pyc 1KB
test.py 5KB
middlewares.py 6KB
README.md 10KB
config
__init__.py 0B
constants.py 1KB
config.py 343B
共 90 条
- 1
资源评论
- 2301_778733702024-07-10超赞的资源,感谢资源主分享,大家一起进步!
王二空间
- 粉丝: 6452
- 资源: 1848
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功