用Chrome的Surfingkeys插件一键复制全国疫情数据(市一级)
全国新型冠状病毒肺炎大数据网址: https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1
因为需要根据疫情严重程度对人员执行不同的隔离措施,所以需要数据支持,而网页上并没提供数据导出,所以自己写了脚本实现。
Excel数据下载:全国数据(更新至 2020.02.16 22:45)
注:网页上 辽宁 数据有误,各市加起来是120人,结果显示121人,有图为证。
以下是实现的方式:
使用谷歌浏览器的 Surfingkeys 插件(下载)执行 JavaScript 代码来获取数据,
把以下代码添加到 Surfingkeys 配置,刷新【插件配置页面】和【数据网址】后,按F9会复制所有数据(可直接粘贴到Excel表的A1单元格)
mapkey('<F9>', 'All', function(){
var url = window.location.href.match(/^(https?:\/\/)?(.+?)(\/)?$/)[2].toLowerCase(); //去除http://前缀和末尾的/ if (url.indexOf('voice.baidu.com/act/newpneumonia') != -1) //网址匹配 wuhan(); }); // https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1 function wuhan() { var oTrsSheng = document.getElementById('nationTable').getElementsByTagName('tbody')[0].children; var res = sheng = shi = ''; var oSpans, oTrsShi, oTds; for (var i=0; i<oTrsSheng.length; i++) //省 { oSpans = oTrsSheng[i].getElementsByTagName('td')[0].getElementsByTagName('span'); sheng = oSpans[1].innerHTML; //记录省名称 if (oSpans[0].className.length == 26) //折叠状态 oSpans[1].click(); if (oTrsSheng[i].nextElementSibling.children.length != 1) //省没有下级,获取本级数据 { oTds = oTrsSheng[i].getElementsByTagName('td'); res += sheng+'\t'+sheng+'\t'+oTds[1].innerHTML+'\t'+oTds[2].innerHTML+'\t'+oTds[3].innerHTML+'\n'; } else { oTrsShi = oTrsSheng[i].nextElementSibling.getElementsByTagName('tr'); //获取所有市 if (oTrsShi.length == 0) continue for (var j=0; j<oTrsShi.length; j++) //市 { oTds = oTrsShi[j].getElementsByTagName('td'); if (oTds[0].firstElementChild.nodeName == 'A') { shi = decodeURI(oTds[0].firstElementChild.href.replace(/.*-/,'')); res += sheng+'\t'+shi+'\t'+oTds[1].innerHTML+'\t'+oTds[2].innerHTML+'\t'+oTds[3].innerHTML+'\n'; } else res += sheng+'\t'+oTds[0].firstElementChild.innerHTML+'\t'+oTds[1].innerHTML+'\t'+oTds[2].innerHTML+'\t'+oTds[3].innerHTML+'\n'; } oSpans[1].click(); //折叠 } }
var t = document.getElementById('ptab-0').getElementsByTagName('span')[0].innerHTML; //获取更新日期 Clipboard.write(t+'\n省\t市\t确诊\t治愈\t死亡\n' + res); //复制最终数据 //console.log(res); }