python 爬取24小时天气数据

您所在的位置:网站首页 24小时天气预报从几点到几点的 python 爬取24小时天气数据

python 爬取24小时天气数据

2024-07-08 16:06| 来源: 网络整理| 查看: 265

python 爬取24小时天气数据

1、引入相关库 # -*- coding: utf-8 -*- import requests import numpy as np

关于爬虫,就是在网页上找到自己想要的数据 ,或者是进行训练,或者是(anyway)…众所周知,在python爬虫的时候,requests是重要的请求数据的库,如果大家是pycharm的编译器,可以在setting中设置,这个不多说,大家心中有数,引入numpy的原因是接下来方便对数据的进行处理。

1.1 开始爬取

话不多说,请开始你的表演

r = requests.get("http://tianqi.2345.com/t/wea_hour_js/53446_2.js?1576984476500")

至于这里面的URL,我为大家解释一下,如何在网页中找到合适的数据。 1、爬虫就是在网页的源码中,找到自己想要的数据,进而存取下来,我们现在需要爬取天气的数据,那么这个时候找到2345天气网,进去后进入开发者模式,或者(F12)均可,点击network,点击JS,每当你刷新网页的时候就会出现新的回应。如下图

图一:天气数据网在这里插入图片描述 这样我们就得了网页的URL,通过我们刚刚说的Requests模块进行爬取。那么,我们想要的数据在哪里呢?在response里面,如下图所示。在这里插入图片描述 红色的部分就是我们需要的数据,我们不妨将其打印出来看看,在这里插入图片描述 这是整个response的结果,很显然,我们需要得到的是一个比较直白的JSON 的数据格式,所以我们对其做一个简单处理。

r.text[16:-32]

这里就是把他的头和尾去掉,然后得到相对直白的数据格式。到这里我们已经得到了网页的数据内容,是不是有点开心,但是我们光得到是不行的,还要真正的拿到————————数据的存储

1.2数据存储 1.2.1 数据分割

在数据存储之前,我们将得到的字符串进行转化成一个数组,首先将其切割为一个一个的数组,用逗号分割开。并将其打印出来。

r_list = r.text[16:-32].split(",") for i in range(len(r_list)): print(r_list[i]) 1.2.2 数据存储

先导入pandas库,因为它包含有存储数据的功能

import pandas as pd

整个的数据是一天24个小时的数据,我现在想得到温度(temp) 和小时(hour),我们用数组a将其分别存放temp和hour,然后用一个变量tian做循环,不断更新每个小时的数据。而且用DataFrame函数将其存储到excel表格中,这就是一个完整的爬取存储过程。

a = np.zeros((24,2),dtype=int) //定义一个数组,24行,2列 tian = 0 //tian作为一个自增的变量 for i in range(len(r_list)): if (r_list[i][1:5])=="temp": //因为temp在打印出来的结果是“temp”所以要得到temp,那就是1-5了。 #print(int(r_list[i][9:-1])) a[tian,0] = int(r_list[i][8:-1]) //这里面将第一位temp找到并放入第一位中 if(r_list[i][1:5])=="hour": //同理 #print(int(r_list[i][8:-1])) a[tian,1] = int(r_list[i][8:-2]) tian = tian + 1 //进行循环,搜集下一下的数据。 #np.savetxt(str(1)+".csv", a, delimiter=',') data = pd.DataFrame(a) //将这样的数组拿到后,存到EXCEl中。就ok了 writer = pd.ExcelWriter('12月21日3.xlsx') data.to_excel(writer, 'page_1', float_format='%.5f') writer.save() writer.close() print(a)

打印出来的结果就是这样 在这里插入图片描述

完整的代码 # -*- coding: utf-8 -*- import requests import numpy as np r = requests.get("http://tianqi.2345.com/t/wea_hour_js/53446_2.js?1576984476500") print(r.headers) print(r.encoding) r.apparent_encoding r.encoding='utf-8' r.text[0:-1] r.text[16:-32] r_list = r.text[16:-32].split(",") for i in range(len(r_list)): print(r_list[i]) help(np.zeros) import pandas as pd a = np.zeros((24,2),dtype=int) tian = 0 for i in range(len(r_list)): if (r_list[i][1:5])=="temp": #print(int(r_list[i][9:-1])) a[tian,0] = int(r_list[i][8:-1]) if(r_list[i][1:5])=="hour": #print(int(r_list[i][8:-1])) a[tian,1] = int(r_list[i][8:-2]) tian = tian + 1 #np.savetxt(str(1)+".csv", a, delimiter=',') data = pd.DataFrame(a) writer = pd.ExcelWriter('12月21日3.xlsx') data.to_excel(writer, 'page_1', float_format='%.5f') writer.save() writer.close() print(a)

如果对你有帮助,抖音搜索ztd0520,来吧,lxd



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3