使用 Python 获取全球新冠确诊、康复和死亡病例数


新冠疫情影响了全球数十亿人的生活。疫情导致人们普遍担忧。开发了许多应用程序来确定并获取有关死亡总数、康复病例、确诊病例等准确信息。当开发者想要围绕疫情开发应用程序时,获取和分析这些信息非常重要。在本文中,我们将了解如何获取 COVID-19 病例的统计数据。

使用 API

API(应用程序编程接口)在现代编程和软件开发中非常重要。它使软件应用程序能够相互交互。它定义了一组协议,其他应用程序可以使用这些协议与软件应用程序交互、交换数据、功能等。API 可以采用多种形式,例如 Web API、库 API、操作系统 API 或硬件 API。基于 HTTP 的 Web API 较为常见。它们使开发者能够通过向特定端点发出 HTTP 请求来访问互联网上的数据和服务。

在下面的示例中,我们将使用以下 API

https://disease.sh/v3/covid-19/all

示例

在以下代码中,我们首先导入了所有必要的模块。接下来构建了 fetch_data 函数,我们使用它通过 API 以 JSON 格式获取数据。process_data 函数将从获取的数据中返回一个数据框。analyze_cases 通过预处理数据框返回确诊、康复和死亡病例数。接下来,我们创建了 visualize_data 函数,它绘制数据的条形图。我们使用 matplotlib 绘制条形图。我们使用了 main 函数,它是我们的驱动代码。

import requests
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
def fetch_data(url):
    response = requests.get(url)
    data = response.json()
    return data
def process_data(data):
    df = pd.DataFrame(data, index=[0])
    return df
def analyze_cases(df):
    confirmed_cases = df['cases'].iloc[0]
    recovered_cases = df['recovered'].iloc[0]
    death_cases = df['deaths'].iloc[0]
    return confirmed_cases, recovered_cases, death_cases
def visualize_data(confirmed_cases, recovered_cases, death_cases):
    labels = ['Confirmed', 'Recovered', 'Deaths']
    values = [confirmed_cases, recovered_cases, death_cases]
    plt.figure(figsize=(8, 6))
    sns.barplot(x=labels, y=values)
    plt.xlabel("Cases")
    plt.ylabel("Count")
    plt.title("Global COVID-19 Cases")
    plt.show()
def main():
    url = "https://disease.sh/v3/covid-19/all"  
    data = fetch_data(url)
    df = process_data(data)
    confirmed_cases, recovered_cases, death_cases = analyze_cases(df)
    print("Global COVID-19 Cases:")
    print("Confirmed cases:", confirmed_cases)
    print("Recovered cases:", recovered_cases)
    print("Death cases:", death_cases)
    visualize_data(confirmed_cases, recovered_cases, death_cases)
if __name__=='__main__':
    main()

输出

Global COVID-19 Cases:
Confirmed cases: 690148376
Recovered cases: 662646473
Death cases: 6890206

使用 Beautifulsoup 进行网页抓取

BeautifulSoup 是 Python 中一个流行的网页抓取库。网页抓取是从网络中提取有意义数据的过程。该库有助于解析 HTML 和 XML 格式的文档。该库提供了一种强大且便捷的方法来搜索和筛选解析文档中的元素。对于我们的用例,我们可以首先使用 Python 的 requests 库获取数据,然后使用 BeautifulSoup 库提取文本。

Python 中的 requests 库有助于与 Web 服务交互并处理 HTTP 请求。该库提供了一种用户友好的方式来发送请求和处理响应。使用 requests 库,开发者可以轻松发送各种 HTTP 请求,例如 GET、POST、PUT、DELETE 等。它支持不同类型的数据有效负载,包括 URL 编码表单数据、JSON 和文件上传,使其适用于不同的 Web 交互。

示例

在以下代码中,我们首先导入了 request、BeautifulSoup、seaborn 等。我们创建了函数 fetch_data,使用 requests 库获取数据并返回 HTML 解析内容。extract_case 函数利用 BeaautifulSoup 方法提取所需信息。visualize_data 函数以确诊病例、康复病例和死亡病例作为参数,并使用 matplotlib 库绘制条形图。我们创建了 main 函数,它是我们程序的驱动代码。

import requests
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
import seaborn as sns
def fetch_data(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')
    return soup
def extract_cases(soup):
    confirmed_cases = int(soup.find('div', class_='maincounter-number').span.text.replace(',', ''))
    recovered_cases = int(soup.find_all('div', class_='maincounter-number')[2].span.text.replace(',', ''))
    death_cases = int(soup.find_all('div', class_='maincounter-number')[1].span.text.replace(',', ''))
    return confirmed_cases, recovered_cases, death_cases
def visualize_data(confirmed_cases, recovered_cases, death_cases):
    labels = ['Confirmed', 'Recovered', 'Deaths']
    values = [confirmed_cases, recovered_cases, death_cases]
    plt.figure(figsize=(8, 6))
    sns.barplot(x=labels, y=values)
    plt.xlabel("Cases")
    plt.ylabel("Count")
    plt.title("Global COVID-19 Cases")
    plt.show()
def main():
    url = "https://www.worldometers.info/coronavirus/" 
    soup = fetch_data(url)
    confirmed_cases, recovered_cases, death_cases = extract_cases(soup)
    print("Global COVID-19 Cases:")
    print("Confirmed cases:", confirmed_cases)
    print("Recovered cases:", recovered_cases)
    print("Death cases:", death_cases)
    visualize_data(confirmed_cases, recovered_cases, death_cases)
if __name__=='__main__':
    main()

输出

Global COVID-19 Cases:
Confirmed cases: 690148376
Recovered cases: 662646473
Death cases: 6890206

使用 selenium 库进行网页抓取

Selenium 是 Python 中一个强大的库,用于自动化 Web 浏览器。它允许程序员通过程序控制 Web 浏览器。这有助于他们自动化任务。Selenium 支持各种 Web 浏览器,包括 Chrome、Firefox、Safari 和 Microsoft Edge。它的工作原理是通过 WebDriver 与浏览器交互,WebDriver 充当 Selenium 库和浏览器之间的桥梁。我们可以使用 Selenium 自动获取 Web 页面内容以满足我们的特定需求。

示例

在以下示例中,我们首先导入了必要的模块和库,如 web driver、BeautifulSoup 等。接下来,我们使用 web driver 方法创建了驱动程序对象。我们使用 requests 库从 URL 获取响应。gety_html 函数返回 HTML 内容。extract_cases 函数是一个用户定义的函数,它从 HTML 解析文本中提取数据。接下来,我们创建了 visualize_data,它根据数据绘制条形图。main 函数包含我们的驱动代码。

from selenium import webdriver
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
import seaborn as sns

def get_html(url):
    driver = webdriver.Chrome()
    driver.get(url)
    html = driver.page_source
    driver.quit()
    return html

def extract_cases(soup):
    confirmed_cases = int(soup.find('div', class_='maincounter-number').span.text.replace(',', ''))
    recovered_cases = int(soup.find_all('div', class_='maincounter-number')[2].span.text.replace(',', ''))
    death_cases = int(soup.find_all('div', class_='maincounter-number')[1].span.text.replace(',', ''))
    return confirmed_cases, recovered_cases, death_cases

def visualize_data(confirmed_cases, recovered_cases, death_cases):
    labels = ['Confirmed', 'Recovered', 'Deaths']
    values = [confirmed_cases, recovered_cases, death_cases]
    plt.figure(figsize=(8, 6))
    sns.barplot(x=labels, y=values)
    plt.xlabel("Cases")
    plt.ylabel("Count")
    plt.title("Global COVID-19 Cases")
    plt.show()

def main():
    url = "https://www.worldometers.info/coronavirus/"
    html = get_html(url)
    soup = BeautifulSoup(html, 'html.parser')
    confirmed_cases, recovered_cases, death_cases = extract_cases(soup)
    
    print("Global COVID-19 Cases:")
    print("Confirmed cases:", confirmed_cases)
    print("Recovered cases:", recovered_cases)
    print("Death cases:", death_cases)
    
    visualize_data(confirmed_cases, recovered_cases, death_cases)

if __name__ == '__main__':
    main()

输出

Global COVID-19 Cases:
Confirmed cases: 690148376
Recovered cases: 662646473
Death cases: 6890206

结论

在本文中,我们了解了如何获取 COVID-19 的统计数据。我们分析并可视化了数据。Python 是一种通用脚本语言,提供多种处理网页抓取和 API 的方法。因此,我们有很多选择,例如 API、网页抓取等,来获取相关数据。我们首先使用了第三方应用程序提供的 API 来获取相关数据。接下来,我们使用了网页抓取的概念从网页中提取所需数据。

更新于: 2023-07-18

53 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告