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)