新型冠状病毒肺炎(Corona Virus Disease 2019,COVID-19),简称“新冠肺炎”,世界卫生组织命名为“2019冠状病毒病” ,是指2019新型冠状病毒感染导致的肺炎。我们想要爬取新型冠状病毒肺炎疫情实时数据,选取百度的疫情实时大数据报告,因为百度网站安全、稳定,适合我们写程序爬取。
一、 示例代码
#!/usr/bin/env python import re import time import urllib.request # 把时间戳转换为日期格式 def make_time(num_str): time_array = time.localtime(int(num_str)) time_str = time.strftime("%Y-%m-%d", time_array) return time_str # 解决中文unicode编码问题 def make_chn(uni_str): return uni_str.encode('UTF-8').decode("unicode_escape") # 百度新型冠状病毒肺炎疫情实时大数据报告网址 url = "https://voice.baidu.com/act/newpneumonia/newpneumonia" data = urllib.request.urlopen(url).read().decode('UTF-8', "ignore") # 集合存放,目的是数据去重 data_set = set() # 国外数据,正则表达式提取 pattern = '{"confirmed":"(\\d*?)","died":"(\\d*?)","crued":"(\\d*?)","relativeTime":(\\d*?),' \ '"confirmedRelative":"(\\d*?)","curConfirm":"(\\d*?)","country":"(.*?)"}' rs_list = re.compile(pattern).findall(data) for rs in rs_list: data_set.add((make_chn(rs[6]), rs[4], rs[5], rs[0], rs[2], rs[1], make_time(rs[3]))) # 国内数据,正则表达式提取 pattern = '"summaryDataIn":{"confirmed":"(\\d*?)","died":"(\\d*?)","cured":"(\\d*?)",(.*?),' \ '"relativeTime":"(\\d*?)","confirmedRelative":"(\\d*?)",(.*?),"curConfirm":"(\\d*?)",(.*?)}' rs_list = re.compile(pattern).findall(data) for rs in rs_list: data_set.add(("中国", rs[5], rs[7], rs[0], rs[2], rs[1], make_time(rs[4]))) # 集合转换为列表,并将结果排序 data_list = sorted(list(data_set), key=lambda x: int(x[3]), reverse=True) # 打印排名靠前的结果 no = 0 print("排名", "地区", "新增", "现有", "累计", "治愈", "死亡", "时间", sep="\t", end="\n") for d in data_list[:20]: no = no + 1 print(no, d[0], d[1], d[2], d[3], d[4], d[5], d[6], sep="\t", end="\n")
二、 运行结果
排名 地区 新增 现有 累计 治愈 死亡 时间 1 美国 30108 455029 502876 29078 18769 2020-04-10 2 西班牙 5051 86524 158273 55668 16081 2020-04-10 3 意大利 3951 98273 147577 30455 18849 2020-04-10 4 法国 7149 87521 125931 25195 13215 2020-04-10 5 德国 4034 65535 122215 53913 2767 2020-04-10 6 中国 64 2099 83386 77938 3349 2020-04-10 7 英国 5706 65043 74605 588 8974 2020-04-10 8 伊朗 28495 68192 35465 4232 2020-04-09 9 土耳其 4747 43600 47029 2423 1006 2020-04-10 10 比利时 18080 26667 5568 3019 2020-04-09 11 瑞士 500 12449 24551 11100 1002 2020-04-10 12 荷兰 152 20442 23249 287 2520 2020-04-10 13 加拿大 765 15566 22148 6013 569 2020-04-10 14 巴西 1781 18696 19943 173 1074 2020-04-10 15 葡萄牙 1516 14804 15472 233 435 2020-04-10 16 奥地利 7177 13560 6064 319 2020-04-09 17 俄罗斯 11028 11917 795 94 2020-04-09 18 韩国 30 3026 10480 7243 211 2020-04-10 19 以色列 313 9130 10408 1183 95 2020-04-10 20 瑞典 544 8434 9685 381 870 2020-04-10