如何使用Python爬取历史天气信息

如何使用Python爬取历史天气信息_第1张图片
事情起因,是今天我们老师布置了一份作业 叫我们去爬取呼和浩特的天气情况 ,首先对于老师的描述 ,我自我把信息过滤了一下 我这边只爬取到了9.30号的日期 因为 对于后面的控制 会增大我代码的的复杂度 不如我手动添加了
首先,介绍一下自己 菜鸡 双非 研究生一枚 ,所以对于代码的排版 以及 美化及优化问题请各位大佬多多担待一下 好了 闲话不多说 进入正题部分
首先,因为每个天气的网站显示的日期格式不同 ,所以我经过百度大法 我发现了
如何使用Python爬取历史天气信息_第2张图片
这个网站(需要点这里)的显示的比较好 对于里面的信息封装 也比较容易我们获取 ,当然你也可以选别的网站 进行信息的爬取。只要找到
具体信息的位置就可以
进入 网站 右击 检查 可以看到 前端的页面 如下图
如何使用Python爬取历史天气信息_第3张图片
好了 网站 前端 介绍到这里 下来 我们进入代码部分
先介绍 一下我们用的库, 这里 因为我也是第一次上手 选择了上手最简单的BeautifulSoup
虽然,相比于re 它速度很慢,但是由于我们获取的数据集不大,速度差距也没有多大差距

import pandas as pd
import requests
from bs4 import BeautifulSoup

http://tianqihoubao.com/lishi/huhehaote/month/202201.html http://tianqihoubao.com/lishi/huhehaote/month/202202.html
观察一下 1月和2月的链接 我们发现只有 后面数字有差距
下来我们书写一份 比较通用的代码 去获取 每个月 以及每年的url

def set_link(year):
    #year参数为需要爬取数据的年份
    link = []
    for i in range(1,10):#这里因为今天是2022/10/3  故我们只获得 1-9月的url 其他的这里改为13即可
        #一年有12个月份
        if i < 10:
            url='http://tianqihoubao.com/lishi/huhehaote/month/{}0{}.html'.format(year,i)
        else:
            url='http://tianqihoubao.com/lishi/huhehaote/month/{}{}.html'.format(year,i)
        link.append(url)
    return link

拿到了每个月份的超链接 后 现在 我们通过 美丽汤 去获取 tr 标签

def get_data():
    link = set_link(2022)
    for url in link:
        response = requests.get(url)
        html = response.content.decode('gbk')
        soup = BeautifulSoup(html,'html.parser')
        tr_list = soup.find_all("tr")

        for data in tr_list[1:]:
            sub_data = data.text.split()
            print(sub_data)
            dates.append(sub_data[0])
            # print(dates)
            conditions.append(''.join(sub_data[1:3]))
            # print(conditions)#检查 自己切片是否正确
            maxtemp.append(sub_data[3])
            mintemp.append(sub_data[5])

经过上述部分 我们 可以得到以下结果
如何使用Python爬取历史天气信息_第4张图片
现在 ,我们 就应该 把拿到的数据 转成csv 即可
datas = pd.DataFrame({‘日期’:dates,‘天气状况’:conditions,‘最高温度’:maxtemp,‘最低温度’:mintemp})
datas.to_csv(‘天气数据.csv’,encoding=‘gbk’)
至此 大功告成
但是 还是未完成老师任务 获取 平均气温 (网上上没有显现,得自己计算,awsl 它是str 没办法转int
头大了 ,今天觉得到这里算了 ,后面我再说怎么转一下类型 去计算 avg_temp 如果有大佬看到这篇水文 劳烦教教小弟)

最终效果展示:
如何使用Python爬取历史天气信息_第5张图片

希望 能帮助到你们
谢谢
如果喜欢请留下你的 关注 留言

入门小道士去炼丹了 有问题请私信

你可能感兴趣的:(python,pandas,数据挖掘)