气象数据文件名解析:使用正则表达式提取时间信息

气象数据文件名解析:使用正则表达式提取时间信息

前言

在处理大量气象数据文件时,文件名往往携带了关键的元数据信息,如日期、时间、地点、测量设备等。其中,时间信息尤为重要,因为它帮助我们理解数据的时效性和用于后续的时间序列分析。由于气象数据文件可能来自不同的来源,其命名规则也各不相同,因此,能够准确解析文件名中的时间信息成为数据预处理的第一步。

正则表达式是一种强大的文本模式匹配工具,广泛应用于各种编程语言中,用于搜索、替换和解析字符串中的特定模式。在气象数据处理领域,正则表达式的灵活性使其成为解析复杂文件名的理想选择,尤其是当文件名遵循某种可预测的格式时。

本指南将向您展示如何使用正则表达式来从气象数据文件名中提取时间信息。我们将介绍正则表达式的基本语法,提供实际的代码示例,并讨论如何应对不同命名规则的挑战。掌握这一技能将极大地提高您在气象数据分析工作流程中的效率和准确性。

正则表达式基础语法

正则表达式(Regular Expression)是一种用于描述字符串模式的语言,可以用来查找、替换或验证文本中的模式。在Python中,re模块提供了正则表达式的支持。下面是一些常用的正则表达式符号和它们的含义:

.:匹配任何单个字符(除了换行符)。*:零次或多次重复前面的字符或组。+:一次或多次重复前面的字符或组。?:零次或一次重复前面的字符或组。{n}:重复前面的字符或组恰好n次。[abc]:匹配字符集合中的任何一个字符。( ):分组表达式,用于捕捉或引用匹配的子串。\d:匹配任何数字,相当于[0-9]。\w:匹配任何单词字符,相当于[a-zA-Z0-9_]。\s:匹配任何空白字符,包括空格、制表符、换页符等等。

看规则那么多,实际上我们匹配日期用到的仅仅需要数字

卫星数据示例

import re

filename = 'FY4A-_AGRI--_N_REGC_1047E_L2-_TBB-_MULT_NOM_20190909154500_20190909154916_4000M_V0001.NC'
pattern = r'\d{8}\d{6}'  # 只匹配一次时间戳

match = re.search(pattern, filename)


time_stamp = match.group()
print(time_stamp)
20190909154500
import re

filename = 'FY4A-_AGRI--_N_REGC_1047E_L2-_TBB-_MULT_NOM_20190909154500_20190909154916_4000M_V0001.NC'
pattern = r'(\d{8}\d{6})_(\d{8}\d{6})'

match = re.search(pattern, filename)


start_time = match.group(1)
end_time = match.group(2)
print("Start Time:", start_time)
print("End Time:", end_time)

Start Time: 20190909154500 End Time: 20190909154916

转为常用的datetime格式

from datetime import datetime
time_stamp_datetime = datetime.strptime(time_stamp, '%Y%m%d%H%M%S')
time_stamp_datetime 

datetime.datetime(2019, 9, 9, 15, 45)

雷达文件示例

filename = '/home/mw/input/pycwr5461/Z_RADR_I_ZGZ01_20200820220246_O_DOR_DXK_CAR.bin.bz2'

pattern = r'(\d{14})'

match_rad = re.search(pattern, filename)


time = match_rad.group()
time
'20200820220246'

‘20200820220246’

time_stamp_datetime = datetime.strptime(time, '%Y%m%d%H%M%S')
time_stamp_datetime 

datetime.datetime(2020, 8, 20, 22, 2, 46)

区别总结:

细心的同学会发现\d{8}\d{6}和\d{14}效果是一致的,那么有什么区别呢

结构差异:\d{8}\d{6} 明确指定了序列的结构,即前8位和后6位;而 \d{14} 只关注总长度为14位,不关心内部结构。捕获组:在使用正则表达式进行匹配时,\d{8}\d{6} 可以通过括号创建捕获组,分别获取前8位和后6位的值,这在处理和解析数据时非常有用。而 \d{14} 则只能获得整个14位数字序列,无法直接区分其内部的结构。例如,假设有一个字符串20230101123456,两种模式都将匹配,但区别在于:

使用 \d{8}\d{6},你可能想分别获取20230101和123456,用于进一步处理,如转换为日期和时间对象。使用 \d{14},你将获得整个20230101123456作为一个整体,而不区分其内部的日期和时间部分。在实际应用中,选择哪种模式取决于你对数据的具体需求和处理方式。如果你需要保持或利用数据的固有结构,使用结构化的模式(如\d{8}\d{6})会更有利;如果你仅关心数字序列的完整性和长度,那么简单的长度限定模式(如\d{14})就足够了。

WRF数据

符号较多,稍微复杂一点

filename = '/home/mw/input/wrfout3385/wrfout_d02_2022-07-14_0900'

pattern = r"_(\d{4}-\d{2}-\d{2}_\d{4})"

match = re.search(pattern, filename)
time_info = match.group(1)
print(f"Time information from the filename: {time_info}")
Time information from the filename: 2022-07-14_0900
# 定义日期时间的格式
time_format = "%Y-%m-%d_%H%M"

# 使用strptime函数将字符串转换为datetime对象
dt_object = datetime.strptime(time_info, time_format)

# 输出datetime对象
dt_object

datetime.datetime(2022, 7, 14, 9, 0)

小练习

那么如果有文件名为‘ANI_VIS_R01_20230308_1400_FY2G.AWX’的文件,你会使用正则获取时间信息吗

### 你的代码

正则表达式的局限性与策略

尽管正则表达式非常强大,但在处理极端复杂的命名规则时也可能遇到局限性。例如,如果文件名中包含动态变化的字段,或者命名规则非常不一致,单纯依靠正则表达式可能不足以解决问题。

在这种情况下,一种策略是结合多个正则表达式,或者使用更复杂的逻辑结构(如嵌套循环和条件判断)。另一个策略是使用外部元数据文件或数据库来辅助解析文件名,这样可以处理更复杂的命名模式

小结

正则表达式为气象数据处理提供了一种高效、灵活的方法,用于解析文件名中的时间信息。通过本指南的学习,您应已了解:

正则表达式的基础语法及其在Python中的应用。如何设计正则表达式来匹配特定的日期和时间格式。实际的代码示例,展示了如何使用正则表达式从文件名中提取日期和时间数据。理解了正则表达式的局限性及在面对复杂命名规则时的策略。在气象学研究和相关领域中,自动化和准确的数据解析是提升工作效率的关键。利用正则表达式进行文件名时间信息的解析,不仅节省了手动处理数据的时间,还减少了人为错误的可能性。随着您对正则表达式掌握程度的加深,您将能够更加自信地处理各种格式的气象数据,从而在科研和业务分析中取得更好的成果。

Python入门学习资料

1.Python系统学习路线图

首先,对于没有学习方向,知识不体系的人,我把我工作几年整理的学习路线分享给大家,做一个借鉴作用,还不知道怎么学习的人可以直接照着我这个学习路线一个个的去学习,知识不体系的人可以参考下我整理路线的方式,总之希望能够帮到你们!

2.Python必备开发工具

3.看视频进行系统学习

先在网上康康达人分享的视频、干货,通俗易懂,形成初始概念;你会发现博主们在进阶成大神之前他们的学习途径有哪些,找到适合自己风格的课程;

不过这样学习技术比较杂乱,所以通过更加系统的视频来学习,效果更好,也更全面。

4.实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

最后

如果你也想自学Python,可以关注我。我会把踩过的坑分享给你,让你不要踩坑,提高学习速度,还整理出了一套系统的学习路线,这套资料涵盖了诸多学习内容:开发工具,基础视频教程,项目实战源码,51本电子书籍,100道练习题等。相信可以帮助大家在最短的时间内,能达到事半功倍效果,用来复习也是非常不错的。

在这里插入图片描述

希望这篇文章对你有帮助,也希望能帮到大家,因为你我都是热爱python的编程语言爱好者。
————————————————

↓↓↓↓

资料获取:已打包,添加文末 Python笔记领取即可获取!

import json import re import time import requests import datetime class AqiSpider: def __init__(self): # 1. 补全url和headers self.url = "{}".format("https://air.cnemc.cn:18014/ 全国空气质量预报信息发布系统 全国空气质量预报信息发布系统 ") self.headers = {'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0'} time.time() datetime.datetime.now().date() def handler_request(self): """ 负责处理网络请求 :return: """ # 2. 发送get请求 # 3. 返回response def parse(self, response): """ 负责解析提取数据 :param response: :return: """ # 4. 补全正则pattern res = re.findall("", html)[0] data = json.loads(res) return data def pipeline(self, data): """ 负责保存数据 :param data: :return: """ # 5、将字典类型转为json字符串 # 6、写入文件 def run(self): """ 启动入口 :return: """ self.fp = open("./aqidata.json", "a", encoding="utf-8") # 7、发送请求 # 8、解析数据 # 9、遍历写入数据 if __name__ == '__main__': a = AqiSpider() a.run() 任务描述 本节的任务是爬取空气质量预报的数据,并最终以文件的形式保存下来。 本关任务: 补全main.py中的代码 保存数据数据文件名为aqidata.json) 采集后样例: {"CityCode": "110000", "Name": "北京市", "AirIndex_From": "70", "AirIndex_To": "90", "DetailInfo": "未来十天,受高压和降水影响,预计我市空气质量持续优良。其中,22日,25日,有两轮西北高压冷空气作用,维持空气质量优良水平。", "Longitude": "116.4071591969", "Latitude": "39.9046716842", "PrimaryPollutant": "O3_8H", "Air48Index_From": "40", "Air48Index_To": "60", "Primary48Pollutant": "O3_8H", "Air72Index_From": "50", "Air72Index_To": "60", "Primary72Pollutant": "O3_8H", "Air96Index_From": "60", "Air96Index_To": "80", "Primary96Pollutant": "O3_8H", "Air120Index_From": "40", "Air120Index_To": "60", "Primary120Pollutant": "O3_8H", "IsPublish_72Hour": true} {"CityCode": "120000", "Name": "天津市", "AirIndex_From": "60", "AirIndex_To": "90", "DetailInfo": "后期,扩散条件相对有利,空气质量以良为主,首要污染物均为O3。", "Longitude": "117.2", "Latitude": "39.13333", "PrimaryPollutant": "O3_8H", "Air48Index_From": "70", "Air48Index_To": "100", "Primary48Pollutant": "O3_8H", "Air72Index_From": "55", "Air72Index_To": "82", "Primary72Pollutant": "O3_8H", "Air96Index_From": "55", "Air96Index_To": "82", "Primary96Pollutant": "O3_8H", "Air120Index_From": "60", "Air120Index_To": "90", "Primary120Pollutant": "O3_8H", "IsPublish_72Hour": true} {"CityCode": "130100", "Name": "石家庄市", "AirIndex_From": "100", "AirIndex_To": "130", "DetailInfo": "预计我市今天下午天气晴间多云,偏北风2-3级,最高气温31℃,气温较高,太阳辐射较强,建议加强O3前体物VOCs、NOX排放管控;今天夜间晴间多云,偏北风1-2级,最低气温22℃,空气质量以良为主;21日天气多云转阴有中到大雨,个别暴雨,降水有利于污染物的清除,偏南风2-3级,日最高气温31℃,气温较高,注意加强O3前体物VOCs、NOX排放管控;22日天气多云,偏北风3-4级,日最高气温32℃,气温较高,首要污染物以O3为主;23日受降水和冷空气共同影响,污染气象条件有利;24日污染扩散气象条件维持有利;25-26日天气多云转晴,气温回升,O3污染物浓度稍有升高。", "Longitude": "114.514306811", "Latitude": "38.0428043266", "PrimaryPollutant": "O3_8H", "Air48Index_From": "70", "Air48Index_To": "100", "Primary48Pollutant": "PM2.5,O3_8H", "Air72Index_From": "60", "Air72Index_To": "90", "Primary72Pollutant": "PM2.5,O3_8H", "Air96Index_From": "50", "Air96Index_To": "80", "Primary96Pollutant": "PM2.5,O3_8H", "Air120Index_From": "70", "Air120Index_To": "100", "Primary120Pollutant": "PM2.5,O3_8H", "IsPublish_72Hour": true} {"CityCode": "130200", "Name": "唐山市", "AirIndex_From": "70", "AirIndex_To": "100", "DetailInfo": "21日,地面受弱高压控制,白天无明显降水过程,午后温度26℃左右、湿度60%左右,以良为主,首要污染物为PM10和O3。\n\n22日,地面转为高压前部,受偏北风和降水过程影响,扩散条件较好,午后温度30℃、湿度50%左右,空气质量以良为主,首要污染物为PM10和PM2.5。\n\n23~24日,地面处于高压前部,受弱偏东北风和降水过程影响,我省大部地区午后温度26℃以下,扩散条件有利,以优良为主,首要污染物为PM10和PM2.5。\n\n25日,地面处于弱高压底部,受南风影响,午后温度28℃、湿度50%左右,以良为主。\n\n26日,高空槽后偏北气流影响,地面处于高压前部,受较强北风影响,我省大部地区午后温度30℃以下,扩散条件有利,以优良为主,首要污染物为PM10和O3。\n\n27日,地面转为弱高压控制,受弱偏东北风影响,午后温度25℃以下,湿度较低,以优良为主,首要污染物为O3和PM2.5。\n\n28日,地面处于低压底部弱气压场控制。受南风影响,午后温度25℃以下、湿度60%-70%,以良为主,首要污染物为O3和PM2.5。\n\n29日,地面为高压前部弱气压场,受弱偏北风影响,温度略有回升,午后温度仍在27℃以下,空气质量以良为主,首要污染物为O3。", "Longitude": "118.1806146248", "Latitude": "39.6304027873", "PrimaryPollutant": "O3_8H", "Air48Index_From": "60", "Air48Index_To": "90", "Primary48Pollutant": "PM2.5,PM10", "Air72Index_From": "35", "Air72Index_To": "65", "Primary72Pollutant": "PM10", "Air96Index_From": "40", "Air96Index_To": "70", "Primary96Pollutant": "PM2.5,PM10", "Air120Index_From": "60", "Air120Index_To": "90", "Primary120Pollutant": "PM10,O3_8H", "IsPublish_72Hour": true} {"CityCode": "130300", "Name": "秦皇岛市", "AirIndex_From": "75", "AirIndex_To": "105", "DetailInfo": "21日,地面受弱高压控制,白天无明显降水过程,午后温度26℃左右、湿度60%左右,以良为主,首要污染物为PM10和O3。\n\n22日,地面转为高压前部,受偏北风和降水过程影响,扩散条件较好,午后温度30℃、湿度50%左右,空气质量以良为主,首要污染物为PM10和PM2.5。\n\n23~24日,地面处于高压前部,受弱偏东北风和降水过程影响,我省大部地区午后温度26℃以下,扩散条件有利,以优良为主,首要污染物为PM10和PM2.5。\n\n25日,地面处于弱高压底部,受南风影响,午后温度28℃、湿度50%左右,以良为主。\n\n26日,高空槽后偏北气流影响,地面处于高压前部,受较强北风影响,我省大部地区午后温度30℃以下,扩散条件有利,以优良为主,首要污染物为PM10和O3。\n\n27日,地面转为弱高压控制,受弱偏东北风影响,午后温度25℃以下,湿度较低,以优良为主,首要污染物为O3和PM2.5。\n\n28日,地面处于低压底部弱气压场控制。傍晚前后有降水,湿清除作用,午后温度20、湿度80%,以优良为主,首要污染物为O3和PM2.5。\n\n29日,地面为高压前部弱气压场,受弱偏北风影响,温度略有回升,午后温度仍在27℃以下,空气质量以良为主,首要污染物为O3。", "Longitude": "119.5996726779", "Latitude": "39.9353359444", "PrimaryPollutant": "O3_8H", "Air48Index_From": "60", "Air48Index_To": "90", "Primary48Pollutant": "PM2.5,PM10", "Air72Index_From": "30", "Air72Index_To": "60", "Primary72Pollutant": "PM10,NO2", "Air96Index_From": "40", "Air96Index_To": "70", "Primary96Pollutant": "PM10,O3_8H", "Air120Index_From": "60", "Air120Index_To": "90", "Primary120Pollutant": "PM10,O3_8H", "IsPublish_72Hour": true} {"CityCode": "130400", "Name": "邯郸市", "AirIndex_From": "90", "AirIndex_To": "120", "DetailInfo": "21日,地面受弱高压控制,无明显降水过程,受南风影响,午后温度32℃左右、湿度60%左右,以良至轻度污染为主,首要污染物为PM10和O3。\n\n22日,地面转为高压前部,受偏北风和降水过程影响,扩散条件较好,午后温度30℃、湿度50%左右,空气质量以良为主,首要污染物为PM10和PM2.5。\n\n23~24日,地面处于高压前部,受北风影响较弱,以良为主,首要污染物为PM10和PM2.5。\n\n25日,地面处于弱高压底部,受南风影响,午后温度28℃、湿度50%左右,以良为主。\n\n26日,高空槽后偏北气流影响,地面处于高压前部,受北风影响较晚,午后温度略高,湿度50%左右,以良为主,首要污染物为PM10和O3。\n\n27日,地面转为弱高压控制,转为东南风影响,午后温度27℃左右、湿度60%左右,以良为主,早上小风,湿度70%以上,可能现短时PM2.5升高。首要污染物为O3和PM2.5。\n\n28日,地面处于低压底部弱气压场控制。受南风影响,午后温度25℃以下、湿度60%-70%,以良为主,首要污染物为O3和PM2.5。\n\n29日,地面为高压前部弱气压场,受弱偏北风影响,温度略有回升,午后温度仍在27℃以下,空气质量以良为主,首要污染物为O3。", "Longitude": "114.5391972691", "Latitude": "36.6255551254", "PrimaryPollutant": "O3_8H", "Air48Index_From": "70", "Air48Index_To": "100", "Primary48Pollutant": "PM2.5,PM10", "Air72Index_From": "70", "Air72Index_To": "100", "Primary72Pollutant": "PM2.5,PM10", "Air96Index_From": "60", "Air96Index_To": "90", "Primary96Pollutant": "PM2.5,PM10", "Air120Index_From": "60", "Air120Index_To": "90", "Primary120Pollutant": "PM10,O3_8H", "IsPublish_72Hour": true} {"CityCode": "130500", "Name": "邢台市", "AirIndex_From": "90", "AirIndex_To": "120", "DetailInfo": "21日,地面受弱高压控制,无明显降水过程,受南风影响,午后温度32℃左右、湿度60%左右,以良至轻度污染为主,首要污染物为PM10和O3。\n\n22日,地面转为高压前部,受偏北风和降水过程影响,扩散条件较好,午后温度30℃、湿度50%左右,空气质量以良为主,首要污染物为PM10和PM2.5。\n\n23~24日,地面处于高压前部,受北风影响较弱,以良为主,首要污染物为PM10和PM2.5。\n\n25日,地面处于弱高压底部,受南风影响,午后温度28℃、湿度50%左右,以良为主。凌晨至上午时段,南北风辐合,风力偏弱,湿度80%以上,PM2.5浓度现短时升高。\n\n26日,高空槽后偏北气流影响,地面处于高压前部,受北风影响较晚,午后温度略高,湿度50%左右,以良为主,首要污染物为PM10和O3。\n\n27日,地面转为弱高压控制,转为东南风影响,午后温度27℃左右、湿度60%左右,以良为主,早上小风,湿度70%以上,可能现短时PM2.5升高。首要污染物为O3和PM2.5。\n\n28日,地面处于低压底部弱气压场控制。受南风影响,午后温度25℃以下、湿度60%-70%,以良为主,首要污染物为O3和PM2.5。\n\n29日,地面为高压前部弱气压场,受弱偏北风影响,温度略有回升,午后温度仍在27℃以下,空气质量以良为主,首要污染物为O3。", "Longitude": "114.5044405648", "Latitude": "37.0705878651", "PrimaryPollutant": "O3_8H", "Air48Index_From": "70", "Air48Index_To": "100", "Primary48Pollutant": "PM2.5,PM10", "Air72Index_From": "70", "Air72Index_To": "100", "Primary72Pollutant": "PM2.5,PM10", "Air96Index_From": "60", "Air96Index_To": "90", "Primary96Pollutant": "PM2.5,PM10", "Air120Index_From": "60", "Air120Index_To": "90", "Primary120Pollutant": "PM10,O3_8H", "IsPublish_72Hour": true} {"CityCode": "130600", "Name": "保定市", "AirIndex_From": "70", "AirIndex_To": "100", "DetailInfo": "21日,地面受弱高压控制,降水影响偏晚,午后温度30℃左右、湿度60%-70%,以良为主,首要污染物为PM10和O3。\n\n22日,地面转为高压前部,受偏北风和降水过程影响,扩散条件较好,午后温度30℃、湿度50%左右,空气质量以良为主,首要污染物为PM10和PM2.5。\n\n23~24日,地面处于高压前部,受弱偏东北风和降水过程影响,我省大部地区午后温度26℃以下,扩散条件有利,以优良为主,首要污染物为PM10和PM2.5。\n\n25日,地面处于弱高压底部,受南风影响,午后温度28℃、湿度50%左右,以良为主,凌晨至上午时段,南北风辐合,风力偏弱,湿度80%以上,PM2.5浓度现短时升高。\n\n26日,高空槽后偏北气流影响,地面处于高压前部,受较强北风影响,我省大部地区午后温度30℃以下,扩散条件有利,以优良为主,首要污染物为PM10和O3。\n\n27日,地面转为弱高压控制,受弱偏东北风影响,午后温度25℃以下,湿度较低,以优良为主,早上小风,湿度70%以上,可能现短时PM2.5升高首要污染物为O3和PM2.5。\n\n28日,地面处于低压底部弱气压场控制。受南风影响,午后温度25℃以下、湿度60%-70%,以良为主,首要污染物为O3和PM2.5。\n\n29日,地面为高压前部弱气压场,受弱偏北风影响,温度略有回升,午后温度仍在27℃以下,空气质量以良为主,首要污染物为O3。", "Longitude": "115.4645959376", "Latitude": "38.8739991373", "PrimaryPollutant": "O3_8H", "Air48Index_From": "40", "Air48Index_To": "70", "Primary48Pollutant": "PM10,O3_8H", "Air72Index_From": "30", "Air72Index_To": "60", "Primary72Pollutant": "PM10,O3_8H", "Air96Index_From": "40", "Air96Index_To": "70", "Primary96Pollutant": "PM10,O3_8H", "Air120Index_From": "60", "Air120Index_To": "90", "Primary120Pollutant": "O3_8H", "IsPublish_72Hour": true} {"CityCode": "130700", "Name": "张家口市", "AirIndex_From": "35", "AirIndex_To": "65", "DetailInfo": "21日,地面受弱高压控制,天空云量较多,午后受较强降水过程影响,以优良为主,首要污染物为PM10和O3。\n\n22日,地面转为高压前部,北风影响,中南部云量偏多,有较强降水过程。强西北风影响,午后温度25℃、湿度30%左右,空气质量以优良为主,首要污染物为PM10和PM2.5。\n\n23~24日,地面处于高压前部,受弱偏东北风和降水过程影响,我省大部地区午后温度26℃以下,扩散条件有利,以优良为主,首要污染物为PM10和PM2.5。\n\n25日,地面处于弱高压底部,天空晴朗少云。受弱北风影响,午后温度24℃、湿度40%以下,以优良为主。\n\n26日,高空槽后偏北气流影响,地面处于高压前部,受较强北风影响,我省大部地区午后温度30℃以下,扩散条件有利,以优良为主,首要污染物为PM10和O3。\n\n27日,地面转为弱高压控制,地面整体云量增加,温度下降。地面小风,午后温度15℃左右,湿度70%左右,以优良为主,早上小风,湿度70%以上,可能现短时PM2.5升高。首要污染物为O3和PM2.5。\n\n28日,地面处于低压底部弱气压场控制。偏西风,无明显污染累积,午后温度20℃以下、湿度40%左右,以优良为主,首要污染物为O3和PM2.5。\n\n29日,地面为高压前部弱气压场,受弱偏北风影响,温度略有回升,午后温度仍在27℃以下,空气质量以良为主,首要污染物为O3。", "Longitude": "114.8875555588", "Latitude": "40.8244202751", "PrimaryPollutant": "PM10,O3_8H", "Air48Index_From": "40", "Air48Index_To": "70", "Primary48Pollutant": "PM10,O3_8H", "Air72Index_From": "30", "Air72Index_To": "60", "Primary72Pollutant": "PM10", "Air96Index_From": "35", "Air96Index_To": "65", "Primary96Pollutant": "PM10,O3_8H", "Air120Index_From": "35", "Air120Index_To": "65", "Primary120Pollutant": "PM10,O3_8H", "IsPublish_72Hour": true} {"CityCode": "130800", "Name": "承德市", "AirIndex_From": "50", "AirIndex_To": "80", "DetailInfo": "21日,地面受弱高压控制,受降水影响偏弱,午后温度23℃左右、湿度70%左右,以优良为主,首要污染物为PM10和O3。\n\n22日,地面转为高压前部,北风影响,中南部云量偏多,有较强降水过程。强西北风影响,午后温度25℃、湿度30%左右,空气质量以优良为主,首要污染物为PM10和PM2.5。\n\n23~24日,地面处于高压前部,受弱偏东北风和降水过程影响,我省大部地区午后温度26℃以下,扩散条件有利,以优良为主,首要污染物为PM10和PM2.5。\n\n25日,地面处于弱高压底部,天空晴朗少云。受弱北风影响,午后温度24℃、湿度40%以下,以优良为主。\n\n26日,高空槽后偏北气流影响,地面处于高压前部,受较强北风影响,我省大部地区午后温度30℃以下,扩散条件有利,以优良为主,首要污染物为PM10和O3。\n\n27日,地面转为弱高压控制,受弱偏东北风影响,午后温度25℃以下,湿度较低,以优良为主,首要污染物为O3和PM2.5。\n\n28日,地面处于低压底部弱气压场控制。傍晚前后有降水,湿清除作用,午后温度20、湿度80%,以优良为主,首要污染物为O3和PM2.5。\n\n29日,地面为高压前部弱气压场,受弱偏北风影响,温度略有回升,午后温度仍在27℃以下,空气质量以良为主,首要污染物为O3。", "Longitude": "117.9633683072", "Latitude": "40.9514913752", "PrimaryPollutant": "O3_8H", "Air48Index_From": "45", "Air48Index_To": "75", "Primary48Pollutant": "PM10,O3_8H", "Air72Index_From": "30", "Air72Index_To": "60", "Primary72Pollutant": "PM10", "Air96Index_From": "35", "Air96Index_To": "65", "Primary96Pollutant": "PM10,O3_8H", "Air120Index_From": "35", "Air120Index_To": "65", "Primary120Pollutant": "PM10,O3_8H", "IsPublish_72Hour": true} {"CityCode": "130900", "Name": "沧州市", "AirIndex_From": "70", "AirIndex_To": "100", "DetailInfo": "21日,地面受弱高压控制,降水影响偏晚,午后温度30℃左右、湿度60%-70%,以良为主,首要污染物为PM10和O3。\n\n22日,地面转为高压前部,受偏北风和降水过程影响,扩散条件较好,午后温度30℃、湿度50%左右,空气质量以良为主,首要污染物为PM10和PM2.5。\n\n23~24日,地面处于高压前部,受弱偏东北风和降水过程影响,我省大部地区午后温度26℃以下,扩散条件有利,以优良为主,首要污染物为PM10和PM2.5。\n\n25日,地面处于弱高压底部,受南风影响,午后温度28℃、湿度50%左右,以良为主。\n\n26日,高空槽后偏北气流影响,地面处于高压前部,受较强北风影响,我省大部地区午后温度30℃以下,扩散条件有利,以优良为主,首要污染物为PM10和O3。\n\n27日,地面转为弱高压控制,转为东南风影响,午后温度27℃左右、湿度60%左右,以良为主,首要污染物为O3和PM2.5。\n\n28日,地面处于低压底部弱气压场控制。受南风影响,午后温度25℃以下、湿度60%-70%,以良为主,首要污染物为O3和PM2.5。\n\n29日,地面为高压前部弱气压场,受弱偏北风影响,温度略有回升,午后温度仍在27℃以下,空气质量以良为主,首要污染物为O3。", "Longitude": "116.8387310882", "Latitude": "38.3042962937", "PrimaryPollutant": "O3_8H", "Air48Index_From": "60", "Air48Index_To": "90", "Primary48Pollutant": "PM2.5,PM10", "Air72Index_From": "40", "Air72Index_To": "70", "Primary72Pollutant": "PM10", "Air96Index_From": "40", "Air96Index_To": "70", "Primary96Pollutant": "PM10", "Air120Index_From": "60", "Air120Index_To": "90", "Primary120Pollutant": "PM10,O3_8H", "IsPublish_72Hour": true} {"CityCode": "131000", "Name": "廊坊市", "AirIndex_From": "60", "AirIndex_To": "90", "DetailInfo": "21日,地面受弱高压控制,降水影响偏晚,午后温度30℃左右、湿度60%-70%,以良为主,首要污染物为PM10和O3。\n\n22日,地面转为高压前部,受偏北风和降水过程影响,扩散条件较好,午后温度30℃、湿度50%左右,空气质量以良为主,首要污染物为PM10和PM2.5。\n\n23~24日,地面处于高压前部,受弱偏东北风和降水过程影响,我省大部地区午后温度26℃以下,扩散条件有利,以优良为主,首要污染物为PM10和PM2.5。\n\n25日,地面处于弱高压底部,受南风影响,午后温度28℃、湿度50%左右,以良为主,凌晨至上午时段,南北风辐合,风力偏弱,湿度80%以上,PM2.5浓度现短时升高。\n\n26日,高空槽后偏北气流影响,地面处于高压前部,受较强北风影响,我省大部地区午后温度30℃以下,扩散条件有利,以优良为主,首要污染物为PM10和O3。\n\n27日,地面转为弱高压控制,受弱偏东北风影响,午后温度25℃以下,湿度较低,以优良为主,首要污染物为O3和PM2.5。\n\n28日,地面处于低压底部弱气压场控制。受南风影响,午后温度25℃以下、湿度60%-70%,以良为主,首要污染物为O3和PM2.5。\n\n29日,地面为高压前部弱气压场,受弱偏北风影响,温度略有回升,午后温度仍在27℃以下,空气质量以良为主,首要污染物为O3。", "Longitude": "116.6837186671", "Latitude": "39.5377576762", "PrimaryPollutant": "PM10,O3_8H", "Air48Index_From": "60", "Air48Index_To": "90", "Primary48Pollutant": "PM2.5,PM10", "Air72Index_From": "35", "Air72Index_To": "65", "Primary72Pollutant": "PM10", "Air96Index_From": "40", "Air96Index_To": "70", "Primary96Pollutant": "PM2.5,PM10", "Air120Index_From": "60", "Air120Index_To": "90", "Primary120Pollutant": "PM10,O3_8H", "IsPublish_72Hour": true} {"CityCode": "131100", "Name": "衡水市", "AirIndex_From": "60", "AirIndex_To": "90", "DetailInfo": "21日,地面受弱高压控制,降水影响偏晚,午后温度30℃左右、湿度60%-70%,以良为主,首要污染物为PM10和O3。\n\n22日,地面转为高压前部,受偏北风和降水过程影响,扩散条件较好,午后温度30℃、湿度50%左右,空气质量以良为主,首要污染物为PM10和PM2.5。\n\n23~24日,地面处于高压前部,受弱偏东北风和降水过程影响,我省大部地区午后温度26℃以下,扩散条件有利,以优良为主,首要污染物为PM10和PM2.5。\n\n25日,地面处于弱高压底部,受南风影响,午后温度28℃、湿度50%左右,以良为主。\n\n26日,高空槽后偏北气流影响,地面处于高压前部,受较强北风影响,我省大部地区午后温度30℃以下,扩散条件有利,以优良为主,首要污染物为PM10和O3。\n\n27日,地面转为弱高压控制,转为东南风影响,午后温度27℃左右、湿度60%左右,以良为主,首要污染物为O3和PM2.5。\n\n28日,地面处于低压底部弱气压场控制。受南风影响,午后温度25℃以下、湿度60%-70%,以良为主,首要污染物为O3和PM2.5。\n\n29日,地面为高压前部弱气压场,受弱偏北风影响,温度略有回升,午后温度仍在27℃以下,空气质量以良为主,首要污染物为O3。", "Longitude": "115.6705326597", "Latitude": "37.7388111913", "PrimaryPollutant": "PM2.5,O3_8H", "Air48Index_From": "45", "Air48Index_To": "75", "Primary48Pollutant": "PM10,O3_8H", "Air72Index_From": "25", "Air72Index_To": "55", "Primary72Pollutant": "PM10", "Air96Index_From": "30", "Air96Index_To": "60", "Primary96Pollutant": "PM2.5,PM10", "Air120Index_From": "55", "Air120Index_To": "85", "Primary120Pollutant": "PM2.5,O3_8H", "IsPublish_72Hour": true} {"CityCode": "140100", "Name": "太原市", "AirIndex_From": "65", "AirIndex_To": "95", "DetailInfo": null, "Longitude": "112.5506929841", "Latitude": "37.8705652723", "PrimaryPollutant": "O3_8H", "Air48Index_From": "65", "Air48Index_To": "95", "Primary48Pollutant": "PM10,O3_8H", "Air72Index_From": "45", "Air72Index_To": "75", "Primary72Pollutant": "PM10", "Air96Index_From": "45", "Air96Index_To": "75", "Primary96Pollutant": "PM10", "Air120Index_From": "55", "Air120Index_To": "85", "Primary120Pollutant": "PM10,O3_8H", "IsPublish_72Hour": true} {"CityCode": "150100", "Name": "呼和浩特市", "AirIndex_From": "50", "AirIndex_To": "80", "DetailInfo": null, "Longitude": "111.7519553111", "Latitude": "40.8415671817", "PrimaryPollutant": "O3_8H", "Air48Index_From": "50", "Air48Index_To": "80", "Primary48Pollutant": "O3_8H", "Air72Index_From": "50", "Air72Index_To": "80", "Primary72Pollutant": "O3_8H", "Air96Index_From": "50", "Air96Index_To": "80", "Primary96Pollutant": "O3_8H", "Air120Index_From": "60", "Air120Index_To": "90", "Primary120Pollutant": "O3_8H", "IsPublish_72Hour": true} {"CityCode": "210100", "Name": "沈阳市", "AirIndex_From": "45", "AirIndex_To": "75", "DetailInfo": "", "Longitude": "123.4323741281", "Latitude": "41.8055784658", "PrimaryPollutant": "O3_8H", "Air48Index_From": "25", "Air48Index_To": "55", "Primary48Pollutant": "O3_8H", "Air72Index_From": "25", "Air72Index_To": "55", "Primary72Pollutant": "O3_8H", "Air96Index_From": "30", "Air96Index_To": "60", "Primary96Pollutant": "O3_8H", "Air120Index_From": "30", "Air120Index_To": "60", "Primary120Pollutant": "O3_8H", "IsPublish_72Hour": true} {"CityCode": "210200", "Name": "大连市", "AirIndex_From": "55", "AirIndex_To": "85", "DetailInfo": null, "Longitude": "121.6147485454", "Latitude": "38.9136803016", "PrimaryPollutant": "O3_8H", "Air48Index_From": "45", "Air48Index_To": "75", "Primary48Pollutant": "O3_8H", "Air72Index_From": "30", "Air72Index_To": "60", "Primary72Pollutant": "O3_8H", "Air96Index_From": "40", "Air96Index_To": "70", "Primary96Pollutant": "O3_8H", "Air120Index_From": "55", "Air120Index_To": "85", "Primary120Pollutant": "O3_8H", "IsPublish_72Hour": true} {"CityCode": "220100", "Name": "长春市", "AirIndex_From": "40", "AirIndex_To": "60", "DetailInfo": null, "Longitude": "125.3235370697", "Latitude": "43.8160454637", "PrimaryPollutant": "O3_8H", "Air48Index_From": "40", "Air48Index_To": "60", "Primary48Pollutant": "O3_8H", "Air72Index_From": "40", "Air72Index_To": "60", "Primary72Pollutant": "O3_8H", "Air96Index_From": "35", "Air96Index_To": "55", "Primary96Pollutant": "O3_8H", "Air120Index_From": "35", "Air120Index_To": "55", "Primary120Pollutant": "O3_8H", "IsPublish_72Hour": true} {"CityCode": "230100", "Name": "哈尔滨市", "AirIndex_From": "48", "AirIndex_To": "78", "DetailInfo": null, "Longitude": "126.5358233005", "Latitude": "45.8021736068", "PrimaryPollutant": "PM10,O3_8H", "Air48Index_From": "47", "Air48Index_To": "77", "Primary48Pollutant": "PM10,O3_8H", "Air72Index_From": "46", "Air72Index_To": "76", "Primary72Pollutant": "PM10,O3_8H", "Air96Index_From": "47", "Air96Index_To": "77", "Primary96Pollutant": "PM10,O3_8H", "Air120Index_From": "49", "Air120Index_To": "79", "Primary120Pollutant": "PM10,O3_8H", "IsPublish_72Hour": true} {"CityCode": "310000", "Name": "上海市", "AirIndex_From": "90", "AirIndex_To": "110", "DetailInfo": "", "Longitude": "121.4736999111", "Latitude": "31.2303950509", "PrimaryPollutant": "O3_8H", "Air48Index_From": "104", "Air48Index_To": "124", "Primary48Pollutant": "O3_8H", "Air72Index_From": "104", "Air72Index_To": "124", "Primary72Pollutant": "O3_8H", "Air96Index_From": "74", "Air96Index_To": "94", "Primary96Pollutant": "O3_8H", "Air120Index_From": "67", "Air120Index_To": "87", "Primary120Pollutant": "O3_8H", "IsPublish_72Hour": true} 相关知识 目标网页分析 目标网站:空气质量预报 F12打开开发者选项,找到名为Default开头请求,我们可以在想响应中看到我们的目标数据,如下图所示。 再来观察具体的具体的请求,发现向服务器发送的是get请求,并且url后携带一个Default参数,可以发现该参数对应的值为当前时间时间戳。因此我们发起请求时需要携带当前时间戳。 那么下面我们发送请求、解析数据然后保存即可。 代码编写 构造url 构建url时,要使用format函数,及其时间函数: format函数用法: # format是字符串内嵌的一个方法,用于格式化字符串。以大括号{}来标明被替换的字符串 s = "{} world !".format("Hello") print(s) # hello world 时间函数: import time import datetime time.time() # 获取当前时间戳 # 1660986303.1178603 datetime.datetime.now().date() # 获取当前日期 # datetime.date(2022, 8, 17) 文件读写 文件创建:使用open()函数,在选择写入模式时,需要根据实际场景考虑。可以一次写入,也可以追加写入。 文件写入:如果写入的文件内容是json数据,要先使用json.dumps函数将Python对象编码成JSON字符串,然后写入文件。 数据解析 如果返回的数据是HTML格式的:可以使用Xpath或者BS4或者正则表达式。 如果返回是JSON格式的:可以使用json.loads函数将JSON字符串解码为Python对象,然后提取数据。 注意:如果目标数据在html内容的Script脚本中,更适合用正则表达式提取,本节的任务就是这样的,要使用正则提取。要用到的正则表达式为: "var cities = \[(\[.*?\])\]\[0\]" 作答要求 根据相关知识,按照要求完成右侧完成代码补全任务。作答完毕,通过击“测评”,可以验证答案的正确性。 开始你的任务吧,祝你成功!
最新发布
06-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值