如何用python爬取天气预报,基于python网络爬虫天气

大家好,小编为大家解答python爬虫爬取天气数据讲解的问题。很多人还不知道如何用python爬取天气预报,现在让我们一起来看看吧!

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,我为大家解释一下,如何在网页中找到合适的数据学c+还是学python
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

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值