新型冠状病毒肺炎国内分省分日期从1.16起的全部数据爬取与整理代码(附下载)

Keelia ·
更新时间:2024-09-21
· 869 次阅读

文章目录一 新型冠状病毒肺炎国内分省分日期全部数据(1.16起):原始json格式数据下载csv格式数据下载二 数据来源与抓取数据到手流程三 数据下载与整理成csv 一 新型冠状病毒肺炎国内分省分日期全部数据(1.16起): 原始json格式数据下载

https://ncportal.esrichina.com.cn/JKZX/yq_20200117.json

https://ncportal.esrichina.com.cn/JKZX/yq_20200118.json

https://ncportal.esrichina.com.cn/JKZX/yq_20200119.json

等等…(把后面的yq_…换成自己想要的日期即可)

csv格式数据下载

链接:https://pan.baidu.com/s/10hpprJ8sMoucJQfvik5SzQ
提取码:6lhy

这是从json格式数据整理来的,整理的代码在下面

二 数据来源与抓取

来自最权威的网站:http://2019ncov.chinacdc.cn/2019-nCoV/

如果了解爬虫的可以往下看,不熟悉的可以直接到上面拿数据

数据到手流程 进入网站后f12,当我们点击地图,在切换省市查询具体数值时,HTML中有一个“data-zr-dom-id=“zr_0””的canvas在动态变化,所以证明这些数据是由js文件操作的。 切换省市查询时在Network中并没有新的数据包,所以证明所有的数据都已经下载在本地了,而js只是读取数据填充并绘图,哎嘿嘿! 在Sources中我们看到2019ncov.chinacdc.cn主机下2019-nCoV文件夹下有个js文件夹和config.js文件,当我们点开config.js时,数据的芳香扑面而来。 从config.js文件中我们可以看到,它列了很多json格式的文件,如yq_20200116.json,yq_20200117.json等,我们通过网址 https://ncportal.esrichina.com.cn/JKZX/yq_20200117.json 可以得到2020年1月17日那天的全部数据 原始数据是json格式,而且地点,日期,各项指标写的很清楚,我们直接转换就行 三 数据下载与整理成csv

数据有省市之分,有日期之分,有新增、累积之分,有确诊、疑似之分,因此这里我导出csv格式后,横坐标是省份,纵坐标是日期,每个单元格格式是:新增确诊-新增疑似-新增死亡-累积确诊-累积疑似-累积死亡

自动下载json格式原始数据代码:

import requests import datetime import time # 得到从startdate开始后N天的日期 def get_n_day_after(start_date, n): date_datetime = datetime.datetime.strptime(start_date, "%Y-%m-%d") date = str( datetime.datetime(date_datetime.year, date_datetime.month, date_datetime.day) + datetime.timedelta(n)).split() return date[0] for i in range(60): date = get_n_day_after('2020-01-16', i) date = "".join(date.split("-")) url = "https://ncportal.esrichina.com.cn/JKZX/yq_" + date + ".json" print(url) # 下载json文件并保存到本地 time.sleep(1) file_name = url.split('/')[-1] r = requests.get(url) with open("data/" + file_name, "wb") as code: pass code.write(r.content)

解析json代码与导出数据到一份csv数据中

import json import os def readfile(path): files = os.listdir(path) file_list = [] for file in files: # 遍历文件夹 if not os.path.isdir(file): file_list.append(path + '/' + file) return file_list # 提取数据 data_dict = {} file_list = readfile("data") for file_name in file_list: f = open(file_name, encoding='utf-8') file_json = json.load(f) # 提取日期 date = (file_name.split('/')[1])[3:11] # date.insert(4, '-') # date.insert(7, '-') date = "%s-%s-%s" % (date[:4], date[4:6], date[6:8]) # 提取省市 features = file_json['features'] for feature in features: properties = feature['properties'] province = properties['省份'] new_confirm = properties['新增确诊'] new_death = properties['新增死亡'] new_suspect = properties['新增疑似'] total_confirm = properties['累计确诊'] total_death = properties['累计死亡'] total_suspect = properties['累计疑似'] write_str = "-".join( [str(new_confirm), str(new_suspect), str(new_death), str(total_confirm), str(total_suspect), str(total_death)]) # {date : { province : write_str } } if data_dict.get(date): data_dict[date].update({province: write_str}) else: data_dict[date] = {province: write_str} sorted(data_dict) # 写入文件 province_init = False file_name = 'COVID-19.CSV' with open(file_name, 'w') as file_writer: for date, value_dict in data_dict.items(): province_list = [] value_list = [] sorted(value_dict) for province, values in value_dict.items(): province_list.append(province) value_list.append(values) # 写入省份 if province_init: file_writer.write(date + "," + ",".join(value_list) + "\n") else: # 首次写入数据需要加入省份 province_init = True file_writer.write("," + ",".join(province_list) + "\n") file_writer.write(date + "," + ",".join(value_list) + "\n")
作者:呆萌的代Ma



冠状病毒 肺炎 数据

需要 登录 后方可回复, 如果你还没有账号请 注册新账号