只需一台电脑,人人都可用 Python 实现新冠病毒分布实时追踪

目前,随着新型冠状病毒(COVID-19)的全球范围内蔓延,海外地区现有确诊已经上升至 293683 (数据更新至 2020.03.25 16:54) 。为了更好了保证自身健康,我们必须了解正在影响?活所在地区的实际统计数据。

如何利用现有工具来事实追踪病情分布呢?近日,一个有趣的开源项目正好解决了这一问题。只需一台电脑,谁都可按照步骤利用 Python 获得专属个人的疫情信息。作者发布了文章介绍该操作过程,雷锋网 AI 源创评论将其编译如下。

图片来源:Sebastian Herrmann on Unsplash

Web 爬虫计划

我们将使?Web 爬虫的?法,以及 Selenium(Web 爬虫的一个库)和 Python?具来完成这一计划。

首先,我们需要找到要从中获取数据的网站,在本次教程中,使?到的是 Worldometers( https://www.worldometers.info/ ),因为作者觉得这上面的数据?常准确,并且?站看起来不错~

下面开始进入计划:

在 Worldometers 上的表格中,显示了每个受影响国家/地区的相关数据,包括:累计确诊病例、新增病例、累计死亡人数、累计治愈人数,以及病危程度的人数统计等。

我们要做的,就是将以上的各个详细数据,通过一系列方法的转化,使其能够自动发到我们的电子邮箱中。当然,选择其它包含这些数据的网站,也不是不可以。

搭建环境

首先,我们需要安装 ChromeDriver,并进行环境搭建。

ChromeDriver 将帮助我们能够控制浏览器并向其发送命令,从而进?测试和之后的其它操作,可以通过链接( https://chromedriver.chromium.org/ )下载与你电脑系统相匹配的安装包。

Ps:如果你不是很熟悉 ChromeDriver,建议尽可能使用最新稳定版本。

下载之后,接下来将需要解压所下载的文件,建议右键单击「文件」,然后选择「Extract Here」,手动进行解压操作。

之后你会发现在该?件夹内,有?个名为「chromedriver」的?件,我们需要按照下面的步骤将其移?计算机上的特定?件夹。

  • 第一步,打开终端并输?以下命令:

sudo su#进?root 模式 cd

#从当前位置返回到基础 mv / home / *your_pc_name * / Downloads / chromedriver / usr / local / bin

#将?件移动到正确的位置

注意:其中的「*your_pc_name *」部分,需要替换为所用计算机的实际名称。

  • 第二步,打开编辑器,作者选择的是 Visual Studio Code( https://code.visualstudio.com/)。
  • 第三步,新建一个项?,并创建两个新?件。可参考下面作者的设置:

Visual Studio Code—项目设置

并且可以发现,在 VS Code 中有?个「Terminal」选项,可以?它在 VS Code 中打开内部终端。

第四步,安装虚拟环境和?于 Web 爬虫驱动程序的 selenium 工具,并在终端中键?下面这些命令:

pip3 install virtualenv

source venv / bin / activate

pip3 install selenium

最后激活虚拟环境,我们的准备工作就完成了。

开始编码

现在,我们完成对环境的搭建以及掌握所需信息获取地址后,就要开始做「编码实现」部分了。

我们将为其创建为?个类以及函数,使?任何名称创建即可,然后启动 Chrome 驱动程序:

class Coronaviru():

def __init __(self):

self.driver = webdriver.Chrome()

然后,转到 VS Code 内部终端并输?下面的代码,此命令使我们可以将?件作为交互式场所:

python -i coronavirus.py

之后,将浏览器的新标签页打开,我们开始向其发出命令。(如果想进?实验,可以使?命令?代替在源?件中键?命令?)

对于终端,命令为:

bot = Coronavirus()

bot.driver.get(‘https://www.worldometers.info/coronavirus/‘)

现在,使其获取源代码:

self.driver.get(‘https://www.worldometers.info/coronavirus/‘) 

当我们进??站时,我们需要提取所选网页中的表格。因此,我们将以这种?式进?操作,将表格作为 Web 元素并将其保存在「表」下。

为了在?页上找到该元素,我们使? find_element_by_xpath()并使?其定义的 ID 对其进?过滤。

table = self.driver.find_element_by_xpath(‘//*

[@id="main_table_countries"]/tbody[1]‘)

在该表中,通过对应的名称,确保要找到我们最初需要获取国家或地区。

country_element = table.find_element_by_xpath(「// td

[contains(text(),‘China‘)]」))

再次使?XPath,我们尝试使用「China」的数据。由于我们需要「China」旁边的数据,因此我们必须确保它属于该?,这就是为什么要从 country_element 中获取父节点:

row = country_element.find_element_by_xpath("./..")

在该?内,我们获取了所需的所有数据,我们将该字符串拆分为每?列,并将其保存为变量:

data = row.text.split(" ")

total_cases = data[1]

new_cases = data[2]

total_deaths = data[3]

new_deaths = data[4]

active_cases = data[5]

total_recovered = data[6]

serious_critical = data[7]

其中,「data」是?个来?字符串拆分的列表,然后我们将其分散到不同的变量中以备后?。

发送电?邮件

在完成编码部分之后,我们就要进入电子邮件发送部分了。

首先,需要设置电?邮件发送服务器。作者用到了 Google 帐户服务,然后进?「应?程序密码」,在那??成?个新密码并在所写脚本程序中使?它。

然后,我们将通过以下代码,为我们将收到的电?邮件制作模板:

def send_mail(country_element, total_cases, new_cases, total_deaths, new_deaths, active_cases, total_recovered, serious_critical):

server = smtplib.SMTP(‘smtp.gmail.com‘, 587)

server.ehlo()

server.starttls()

server.ehlo()

server.login(‘email‘, ‘password‘)

subject = ‘Coronavirus stats in your country today!‘

body = ‘Today in ‘ + country_element + ‘\

\nTotal cases: ‘ + total_cases +‘\

\nNew cases: ‘ + new_cases + ‘\

\nTotal deaths: ‘ + total_deaths + ‘\

\nNew deaths: ‘ + new_deaths + ‘\

\nActive cases: ‘ + active_cases + ‘\

\nTotal recovered: ‘ + total_recovered + ‘\

\nSerious, critical cases: ‘ + serious_critical + ‘\

\nCheck the link: https://www.worldometers.info/coronavirus/‘

msg = f"Subject: {subject}\n\n{body}"

server.sendmail(

‘Coronavirus‘,

‘email‘,

msg

)

print(‘Hey Email has been sent!‘)

server.quit()

这样,就能够实现单次的最新疫情信息获取了。如果你希望每天重复执?此脚本,可以通过下面链接中的编码实现:

https://stackoverflow.com/questions/15088037/python-script-to-do-something-at-the-same-time-every-day

成功订阅!

最后,我们就得到了自制的邮件订阅啦~(如下所示)

电子邮件形式成功

当然,除了可以将我们所在地区的新冠病毒最新情况发到个人邮箱外,通过这样的方法,举一反三,你想订阅的其它资讯也可以自定义发送,而且还没有任何广告~

而在此,也再次提醒所有朋友,在目前疫情持续情况下,一定要勤洗手、戴口罩;同时,尽可能避免与他?进?过多的?体接触。

原文地址:

https://towardsdatascience.com/how-to-track-coronavirus-with-python-a5320b778c8e

完整开源代码 Github 地址:

https://github.com/lazargugleta/coronavirusStats/blob/master/coronavirus.py

原文地址:https://www.cnblogs.com/7758520lzy/p/12587836.html

时间: 2024-10-09 20:08:01

只需一台电脑,人人都可用 Python 实现新冠病毒分布实时追踪的相关文章

(转)如何在一台电脑上开启多个tomcat 和配置让系统识别哪个具体的tomcat

大家基本上都只在一台电脑上面启动一个Tomcat,而启动多个Tomcat会提示报错等相关故障.而假如调试负载均衡及集群的时候,需要在一台电脑上面开启多个Tomcat,那么怎么开启呢? 方法/步骤 首先需要知道的是,我们不通过Eclipse等其它工具启动Tomcat而通过手动启动Tomcat的时候是需要配置环境变量的.而我们启动Tomcat的时候,则需要读取环境变量中的相关配置来运行.也就是说,假如我有多个Tomcat,而启动的时候都是启动环境变量里面的Tomcat.这样便会因为端口冲突而导致启动

Python虚拟环境导出包安装到另一台电脑的方法

环境:Windows 版 Python Python 3.6.8可以用自带的命令建立虚拟环境,不用安装另外的如 virtualenv.virtualenvwrapper等工具. python -m venv MyApp 当这样建立了虚拟环境后,在其中安装的包很多,也很费时间,你想将这个MyApp放到其他电脑上去开发,是不是直接复制MyApp文件夹就可以了呢? 不行!因为在建立虚拟环境时,虚拟环境中的python.exe, pip.exe......等一些文件会“硬编码”,记录的是绝对路径,放到其

限制在同一台电脑上只允许有一个用户登录系统

在web应用系统中,出于安全性考虑,经常需要对同一客户端登录的用户数量和一个客户同时在多个客户端登陆进行限制.具体一点就是: 1.在同一台电脑上一次只允许有一个用户登录系统,2.一个用户在同一时间只允许在一个客户端登录. 我最近做的一个系统就遇到了这样的问题,本来系统已经开发完成了,但是安全测评没有通过,就是因为没有做这两个限制.怎么来做这样的限制呢?我在网上找了很久,发现问这个问题的人很多,但是没有找到特别清楚的答案.后来自己摸索着,看了一些书,终于找到解决办法了. 要解决这个问题实际上不难,

用代码操控另一台电脑

用代码操控另一台电脑 2015-03-11 设计实现参考 做测试时,往往要配置测试机器,如果能用代码自动化实现,那是最好不过的. 据我所知,有三种方法[1]: socket通讯即可完成 用psexec,(psexec是pstools中的一个程序) 用ManagementClass类 第1.2.中方法,都需要在被操控的机器上安装接受信息的程序.所以我采用第3.种方法,只需在一台机器上操控即可. 设计 返回 使用ManagementClass类,只需知道被操控机器的用户名.密码即可,可对不在同一域中

人人都是程序员

有一家饭店的大厨,烧得一手好菜,经过口碑相传,客人从五湖四海闻名而来.然而这对饭店的老板来说,并不单纯是一个好消息.因为客人不是奔着饭店,而是奔着大厨的手艺来的.老板必须想办法留住这位大厨,否则他一旦被别人挖走,饭店的生意就会一落千丈了.然而即便老板不惜血本保证了大厨的忠诚度,风险也依然存在: 大厨休息或请假的时候,菜品的口味就无法让顾客满意: 大厨只有一个,如果想在多个地方开分店,那口味也就不能保证了: 大厨再厉害,同时也只能炒一个菜,而顾客越来越多,输出总是供不应求: 大厨年纪大了总是要退休

从程序员到项目经理(4):程序员加油站 -- 不是人人都懂的学习要点

学习是一种基础性的能力.然而,“吾生也有涯,而知也无涯.”,如果学习不注意方法,则会“以有涯随无涯,殆矣”. 一.学习也是一种能力 看到这个标题,有人会说:“学习,谁不会?”的确,学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力.我们在刚出生的时候,什么也不知道,是一张真正的白纸,我们靠学习的本能,学会了走路.说话.穿衣服…后来,我们上学了,老师把书本上的知识一点一点灌输到我们的脑子里,我们掌握的知识越来越多,与此同时,我们学习能力却好像越来越差了,习惯了被别人喂饱,似乎忘记了怎么来喂自

Synergy 一套键鼠同时控制多台电脑的神器!超级方便!

想必很多人都拥有多台电脑,譬如台式机+笔记本,很多时候我们都会同时打开它们工作.可是你有没发现,如果桌子上摆放着多台电脑多套键盘鼠标,不停来回切换使用是否很累呢?如果说现在可以只用一套键鼠,就能同时控制你全部的电脑,你会否兴奋? Synergy 正是为此而生的好工具!它可以让你的多台电脑共享一套键鼠,甚至还可以共享剪贴板,而你只需动动鼠标,指针就可以轻松地在各台电脑屏幕之间来回穿梭,就像一台电脑使用多个显示器一样.而且 Synergy 完全免费开源,并跨平台支持 Win/Mac/Linux,相当

从程序员到项目经理之程序员加油站 -- 不是人人都懂的学习要点(转发)

学习是一种基础性的能力.然而,“吾生也有涯,而知也无涯.”,如果学习不注意方法,则会“以有涯随无涯,殆矣”. 一.学习也是一种能力 看到这个标题,有人会说:“学习,谁不会?”的确,学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力.我们在刚出生的时候,什么也不知道,是一张真正的白纸,我们靠学习的本能,学会了走路.说话.穿衣服…后来,我们上学了,老师把书本上的知识一点一点灌输到我们的脑子里,我们掌握的知识越来越多,与此同时,我们学习能力却好像越来越差了,习惯了被别人喂饱,似乎忘记了怎么来喂自

Synergy – 教你在局域网中用一套键盘/鼠标控制多台电脑

想必很多人都拥有多台电脑,譬如台式机+笔记本,很多时候我们都会同时打开它们工作.可是你有没发现,如果桌子上摆放着多台电脑多套键盘鼠标,不停来回切换使用是否很累呢?如果说现在可以只用一套键鼠,就能同时控制你全部的电脑,你会否兴奋? Synergy 正是为此而生的好工具!它可以让你的多台电脑共享一套键鼠,甚至还可以共享剪贴板,而你只需动动鼠标,指针就可以轻松地在各台电脑屏幕之间来回穿梭,就像一台电脑使用多个显示器一样.而且 Synergy 完全免费开源,并跨平台支持 Win/Mac/Linux,相当