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\]"
作答要求
根据相关知识,按照要求完成右侧完成代码补全任务。作答完毕,通过点击“测评”,可以验证答案的正确性。
开始你的任务吧,祝你成功!