Python语言程序设计之新冠肺炎疫情实时数据的爬取

新型冠状病毒肺炎(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

Leave a Reply

Your email address will not be published. Required fields are marked *