天气预报信息获取程序--可以使用

news/2024/11/8 18:44:11/

 

 

 

一、优化了,输入城市代码,获取城市信息

# coding=utf-8
import requests
import re
import csv
import datetimeclass WeatherForecast(object):def __init__(self,city_code,start_year,end_year,end_month):self.city_code=city_codeself.start_year=start_yearself.end_year=end_yearself.end_month=end_month# self.url = 'https://tianqi.2345.com/Pc/GetHistory?areaInfo%5BareaId%5D=59493&areaInfo%5BareaType%5D=2&date%5Byear%5D={0}&date%5Bmonth%5D={1}'# #西安地址链接  57036--->BareaId%5D=59493# self.url = 'https://tianqi.2345.com/Pc/GetHistory?areaInfo%5BareaId%5D=57036&areaInfo%5BareaType%5D=2&date%5Byear%5D={0}&date%5Bmonth%5D={1}'# 咸阳地址链接57048--->%5BareaId%5D=59493# self.url = 'https://tianqi.2345.com/Pc/GetHistory?areaInfo%5BareaId%5D=57048&areaInfo%5BareaType%5D=2&date%5Byear%5D={0}&date%5Bmonth%5D={1}'self.headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.24','accept-encoding': 'gzip, deflate, br'}self.data_list = []def get_content(self, url):res = requests.get(url=url, headers=self.headers)content = res.json()# print(content['data'])return content['data']def parse_data(self, content):result = re.compile(r'<td>(?P<date>.*?)</td>.*?<td style="color:#ff5040;">(?P<max>.*?)</td>'r'.*?<td style="color:#3097fd;" >(?P<min>.*?)</td>.*?<td>(?P<weather>.*?)</td>'r'.*?<td>(?P<cloud>.*?)</td>.*?<td><span class="history-aqi wea-aqi.*?>(?P<sky>.*?)</span></td>',re.S)find_result = result.finditer(content)for it in find_result:data_dict = it.groupdict()# print(data_dict)self.data_list.append(data_dict)return self.data_listdef write_csv(self, data_list):curent_date=datetime.datetime.now().strftime("%Y%m%d")save_name=str(self.city_code)+curent_date+'.csv'with open(save_name, 'w',newline='') as f:writer = csv.writer(f)writer.writerow(['日期', '最高温度', '最低温度', '天气', '风力风向', '空气质量'])for i in data_list:writer.writerow(i.values())print(i.values())#     爬取数据的事项,只能获取整年,如果到月份的话                if year==2024 & month>6:#                     continue  通过他跳过指定的月份,获取数据def run(self):for year in range(self.start_year, self.end_year+1, 1):for month in range(1, 13, 1):if year>self.end_year:continueelif  year==self.end_year:if month>self.end_month:continueurl = f'https://tianqi.2345.com/Pc/GetHistory?areaInfo%5BareaId%5D={self.city_code}&areaInfo%5BareaType%5D=2&date%5Byear%5D={year}&date%5Bmonth%5D={month}'print('正在获取第{0}年{1}月的天气!'.format(year, month))content = self.get_content(url)data = self.parse_data(content)self.write_csv(data)print('全部获取完毕,请在程序目录获取下载xxxx.csv!')# 使用办法  就是换里面的url地址,以及修改下面的年月
# 具体内容查看 “数据分析.txt”里面的信息
# 天气预报查询接口
# https://tianqi.2345.com/wea_history/57036.htm
if __name__ == '__main__':print("输入起始年,结束年,结束月")city_code = int(input("起始城市代码:"))start_year=int(input("起始年:"))end_year=int(input("结束年:"))end_month=int(input("结束年月:"))weather = WeatherForecast(city_code,start_year,end_year,end_month)weather.run()# 调整获取指定年份的指定月份之前的数据

二、代码分析

本次对数据提取进行分析:---》数据解析的分析

    def parse_data(self, content):result = re.compile(r'<td>(?P<date>.*?)</td>.*?<td style="color:#ff5040;">(?P<max>.*?)</td>'r'.*?<td style="color:#3097fd;" >(?P<min>.*?)</td>.*?<td>(?P<weather>.*?)</td>'r'.*?<td>(?P<cloud>.*?)</td>.*?<td><span class="history-aqi wea-aqi.*?>(?P<sky>.*?)</span></td>',re.S)find_result = result.finditer(content)for it in find_result:data_dict = it.groupdict()# print(data_dict)self.data_list.append(data_dict)return self.data_list

 

上面返回的内容是个json文件,json中data就是需要的数据

 那么这个数据内容是什么呢?我们打印出来看下

 

 

  result = re.compile(r'<td>(?P<date>.*?)</td>.*?<td style="color:#ff5040;">(?P<max>.*?)</td>'r'.*?<td style="color:#3097fd;" >(?P<min>.*?)</td>.*?<td>(?P<weather>.*?)</td>'r'.*?<td>(?P<cloud>.*?)</td>.*?<td><span class="history-aqi wea-aqi.*?>(?P<sky>.*?)</span></td>',re.S)

通过上面的正则就是可以提取出来其中的内容了


http://www.ppmy.cn/news/185329.html

相关文章

机器学习:基于XGBoost对信用卡欺诈行为的识别

机器学习&#xff1a;基于XGBoost对信用卡欺诈行为的识别 作者&#xff1a;i阿极 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f4…

超薄本在未连接网线怎么查看本地mac地址

正常的情况下我们查看mac地址的时候&#xff0c;直接在winR&#xff0c;输入cmd&#xff0c;调出操作窗口输入ipconfig/all命令就行了。但是我们在未插入转接头的时候&#xff0c;是查看不到本地mac地址的&#xff0c;只有无线网和虚拟的mac地址&#xff0c;查看不到本地的mac地…

超薄笔记本电脑回收站里面的文件清理了怎么找回

回收站文件清空了是很正常的一件事&#xff0c;毕竟里面如果放了很多的文件看着也不舒服&#xff0c;这时候我们就会开始清理电脑上回收站的文件&#xff0c;因为工作的时候电脑上会有很多的文件误删进去回收站中&#xff0c;删除之后就忘记拿出来了&#xff0c;清理完回收站的…

java编程选游戏本还是轻薄本,编程用什么笔记本,超薄本还是游戏本

cpu内存硬盘越大越快越好&#xff0c;游戏编程需要好的显卡。 理由很简单&#xff1a; 1、可能要用很多ide&#xff0c;我经常用的ide就有4个&#xff0c;都是大型软件&#xff0c;同时开要跑得起来。 2、机器上不可避免的要安装数据库&#xff0c;也要跑得起来。 3、做虚拟机跑…

s40-10报价 宏碁swift_3:2屏经典回归:宏碁发布 Swift 3(SF313-52/G)超薄笔记本电脑...

3:2屏经典回归&#xff1a;宏碁发布 Swift 3(SF313-52/G)超薄笔记本电脑699美元(约4850)元 2020-01-08 10:32:14 16点赞 32收藏 20评论 还记得之前我们曾报道过的3&#xff1a;2长宽比屏笔记本吗&#xff1f;现在&#xff0c;它来了&#xff0c;acer(宏碁)官方正式发布了这款颇…

欣赏ThinkPad X1超薄本

CONEY 刚换了T410&#xff0c;看到这款X1&#xff0c;表示兴趣很大&#xff0c;下面让我们领略一下这款超薄本的魅力吧~ 联想即将要推出迄今为止最薄的ThinkPad X1 笔记本。这款笔记本将采用新的电池技术。 X1的电池将是用户无法更换的&#xff0c;但这块电池能够带来更好的性…

环境搭建第二弹--超薄本ubuntu和开发板共享文件

前言: 开发板是超薄本,没有物理网卡,只有内置无线网卡。 网上买了个USB转网口,设置虚机网卡桥接选择USB网口,仍然不能使得ubuntu和开发板互ping通。只得借助路由器。 使用的是小米路由器。 环境搭建 小米路由器设置 小米路由器恢复出厂设置 IP设置为DHCP,IP会被分配为…

macbook air m1性能加倍超长续航超薄本

苹果对于M1的自信非常强&#xff0c;虽然没有在性能最强的Mac中使用&#xff0c;但是MacBookAir和MacBook Pro中使用&#xff0c;这两类产品的用户群体是Mac中最大的&#xff0c;所以说苹果对于M1的性能表现绝对是满意的。苹果的MacBook Air自问世以来&#xff0c;以轻薄便携而…