COVID-19肺炎疫情数据实时监控(python爬⾍+pyecharts数据可视化+wo。。
。
⽂章⽬录
这⾥是⼀段防爬⾍⽂本,请读者忽略。
本⽂原创⾸发于 CSDN,作者 TRHX。
博客⾸页:itrhx.blog.csdn/
本⽂链接:itrhx.blog.csdn/article/details/107140534
未经授权,禁⽌转载!恶意转载,后果⾃负!尊重原创,远离剽窃!
【1x00】前⾔
本来两三个⽉之前就想搞个疫情数据实时数据展⽰的,由于各种不可抗拒因素⼀⽽再再⽽三的鸽了,最近终于抽空写了⼀个,数据是⽤Python 爬取的,请求库⽤的 requests,解析⽤的 Xpath 语法,词云⽤的 wordcloud 库,数据可视化⽤ pyecharts 绘制的地图和折线图,数据储存在 Excel 表格⾥⾯,使⽤ op
enpyxl 对表格进⾏处理。
本程序实现了累计确诊地图展⽰和每⽇数据变化折线图展⽰,其他更多数据的获取和展⽰均可在程序中进⾏拓展,可以将程序部署在服务器上,设置定时运⾏,即可实时展⽰数据,pyecharts 绘图模块也可以整合到 Web 框架(Django、Flask等)中使⽤。
在获取数据时有全球和两个概念,全球包含中国,不包含中国,后期绘制的四个图:中国累计确诊地图、全球累计确诊地图(包含中国)、中国每⽇数据折线图、每⽇数据折线图(不包含中国)。
【2x00】思维导图
【3x00】数据结构分析
通过查看百度的疫情数据页⾯,可以看到很多整齐的数据,猜测就是疫情相关的数据,保存该页⾯,对其进⾏格式化,很容易可以分析出所有的数据都在 <script type="application/json" id="captain-config"></script> ⾥⾯,其中 title ⾥⾯是⼀些 Unicode 编码,将其转为中⽂后更容易得到不同的分类数据。
由于数据繁多,可以将数据主体部分提取出来,删除⼀些重复项和其他杂项,留下数据⼤体位置并分析数据结构,便于后期的数据提取,经过处理后的数据⼤致结构如下:
<script type="application/json" id="captain-config">
{
"component":[
{
"mapLastUpdatedTime":"2020.07.05 16:13",// 国内疫情数据最后更新时间
"caseList":[// caseList 列表,每⼀个元素是⼀个字典
{
"confirmed":"1",// 每个字典包含中国每个省的每⼀项疫情数据
"confirmed":"1",// 每个字典包含中国每个省的每⼀项疫情数据
"died":"0",
"crued":"1",
"relativeTime":"1593792000",
"confirmedRelative":"0",
"diedRelative":"0",
"curedRelative":"0",
"curConfirm":"0",
"curConfirmRelative":"0",
"icuDisable":"1",
"area":"西藏",
"subList":[// subList 列表,每⼀个元素是⼀个字典
{
"city":"拉萨",// 每个字典包含该省份对应的每个城市疫情数据
"confirmed":"1",
"died":"0",
"crued":"1",
"confirmedRelative":"0",
"curConfirm":"0",
"cityCode":"100"
}
]
}
]
,
"caseOutsideList":[// caseOutsideList 列表,每⼀个元素是⼀个字典{
"confirmed":"241419",// 每个字典包含各国的每⼀项疫情数据
"died":"34854",
"crued":"191944",
"relativeTime":"1593792000",
"confirmedRelative":"223",
"curConfirm":"14621",
"icuDisable":"1",
"area":"意⼤利",
"subList":[// subList 列表,每⼀个元素是⼀个字典
{
"city":"伦巴第",// 每个字典包含每个国家对应的每个城市疫情数据
"confirmed":"94318",
"died":"16691",
php数组取值"crued":"68201",
"curConfirm":"9426"redis的正确使用方法
}
]
}
],
"summaryDataIn":{// summaryDataIn 国内总的疫情数据"confirmed":"85307",
"died":"4648",
"cured":"80144",
"asymptomatic":"99",
"asymptomaticRelative":"7",
python请求并解析json数据"unconfirmed":"7",
"relativeTime":"1593792000",
"confirmedRelative":"19",
"unconfirmedRelative":"1",
"curedRelative":"27",
"diedRelative":"0",
"icu":"6",
linux翻译成中文怎么念"icuRelative":"0",
"overseasInput":"1931", "unOverseasInputCumulative":"83375", "overseasInputRelative":"6", "unOverseasInputNewAdd":"13",
"curConfirm":"515",
"curConfirmRelative":"-8",
"icuDisable":"1"
"icuDisable":"1"
},
"summaryDataOut":{// summaryDataOut 国外总的疫情数据"confirmed":"11302569",
"died":"528977",
"curConfirm":"4410601",
"cured":"6362991",
"confirmedRelative":"206165",
"curedRelative":"190018",
"diedRelative":"4876",
"curConfirmRelative":"11271",
"relativeTime":"1593792000"
},
"trend":{// trend 字典,包含国内每⽇的疫情数据"updateDate":[],// ⽇期
"list":[// list 列表,每项数据及其对应的值
{
"name":"确诊",
"data":[]
},
{
"name":"疑似",
"data":[]
},
{
"name":"治愈",
"data":[]
},
{
"name":"死亡",c程序设计第五版和第三版区别
"data":[]
},
{
"name":"新增确诊",
"data":[]
},
{
"name":"新增疑似",
"data":[]
},
{
"name":"新增治愈",
"data":[]
},
{
"name":"新增死亡",
"data":[]
},
{
"name":"累计输⼊",
"data":[]
},
{
"name":"新增输⼊",
"data":[]
}
]
},
"foreignLastUpdatedTime":"2020.07.05 16:13",// 国外疫情数据最后更新时间"globalList":[// globalList 列表,每⼀个元素是⼀个字典
{
"area":"亚洲",// 按照不同洲进⾏分类
"subList":[// subList 列表,每个洲各个国家的疫情数据
{
"died":"52",
"confirmed":"6159",
"confirmed":"6159",
"crued":"4809",
"curConfirm":"1298",
"confirmedRelative":"0",
"relativeTime":"1593792000",
"country":"塔吉克斯坦"
}
],
"died":"56556",// 每个洲总的疫情数据
"crued":"1625562",
"confirmed":"2447873",
"curConfirm":"765755",
"confirmedRelative":"60574"
},
{
"area":"其他",// 其他特殊区域疫情数据
"subList":[
{
"died":"13",
"confirmed":"712",
"crued":"651",
"curConfirm":"48",
"confirmedRelative":"0",
"relativeTime":"1593792000",
"country":"钻⽯公主号邮轮"
}
],
"died":"13",// 其他特殊区域疫情总的数据
"crued":"651",
"confirmed":"712",
"curConfirm":"48",
"confirmedRelative":"0"
},
{
"area":"热门",// 热门国家疫情数据
"subList":[
{
"died":"5206",
"confirmed":"204610",
"crued":"179492",
"curConfirm":"19912",
"confirmedRelative":"1172",
"relativeTime":"1593792000",
"country":"⼟⽿其"
}
],
"died":"528967",// 热门国家疫情总的数据
"crued":"6362924",
"confirmed":"11302357",
"confirmedRelative":"216478",
"curConfirm":"4410466"
}],
"allForeignTrend":{// allForeignTrend 字典,包含国外每⽇的疫情数据"updateDate":[],// ⽇期
"list":[// list 列表,每项数据及其对应的值
{
"name":"累计确诊",
"data":[]
},
{
"name":"治愈",
"data":[]
},
{
"name":"死亡",
"data":[]
"data":[]
},
{
"name":"现有确诊",
"data":[]
},
{
"name":"新增确诊",
"data":[]
}
]
},
"topAddCountry":[// 确诊增量最⾼的国家
{
"name":"美国",
"value":53162
}
],
"topOverseasInput":[// 输⼊最多的省份
{
"name":"⿊龙江",
"value":386
}
]
}
]
}
</script>
【4x00】主函数 main()
分别将数据获取、词云图绘制、地图绘制写⼊三个⽂件:data_get()、data_wordcloud()、data_map(),然后使⽤⼀个主函数⽂件 main.py 来调⽤这三个⽂件⾥⾯的函数。
import data_get
import data_wordcloud
import data_map
vbscript系统对象data_dict = data_get.init()
data_get.china_total_data(data_dict)
data_get.global_total_data(data_dict)
data_get.china_daily_data(data_dict)
data_get.foreign_daily_data(data_dict)
data_wordcloud.china_wordcloud()
data_wordcloud.global_wordcloud()
data_map.all_map()
【5x00】数据获取模块 data_get
【5x01】初始化函数 init()
使⽤ xpath 语法 //script[@id="captain-config"]/text() 提取⾥⾯的值,利⽤ json.loads ⽅法将其转换为字典对象,以便后续的其他函数调⽤。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论