当前位置: 首页 > 后端技术 > Python

如何使用Python追踪全球新冠肺炎数据?

时间:2023-03-25 20:57:11 Python

随着大规模疫情的爆发,相关信息的传播速度甚至超过了冠状病毒(COVID-19)本身的传播速度,我们很难筛选出哪些信息是真正对我们有益的。但有一点很清楚,我们必须了解影响我们居住地区的实际统计数据。今天,我们就用一种有趣的方式——Python,教大家如何获取全球冠状病毒相关数字的信息。我将向您展示如何在您的电子邮件中获取每天有多少人受到冠状病毒和类似事件的影响。我将使用一种称为使用Selenium和Python进行网络抓取的方法。来吧~进入准备正题。首先我们要找到数据源,即数据从哪里来?我决定用Worldometers来做这个,因为里面的数据比较准确,而且网站的页面也很直观简洁。下表显示了每个受影响国家/地区的数据,许多列中的数据内容各不相同。我们正在尝试做的是从表格中获取您想要获取的国家/地区的数据,然后它会自动向您发送电子邮件。搭建环境首先,需要安装一个ChromeDriver(https://chromedriver.chromium...),它可以让我们操作浏览器并向其发送命令,以供测试和使用。打开链接并下载适用于您的操作系统的文件,然后解压缩文件。我建议进入文件,通过右键单击手动执行,然后单击“ExtractHere”。在这个文件夹中,有一个名为“chromedriver”的文件,我们必须将其移动到您计算机上的特定文件夹中。打开终端,输入以下命令:1sudosu#进入root模式2cd#从当前位置回到base3mv/home/*your_pc_name*/Downloads/chromedriver/usr/local/bin4#移动文件到正确的locationNext,只需插入计算机的实际名称,而不是your_pc_name。完成后,打开编辑器。我个人的选择是VisualStudioCode。它易于使用、可定制并减轻您设备的负担。在任何你喜欢的地方打开一个新项目并创建两个新文件。这是我的文件打开时的样子:在VSCode中,有一个“终端”选项卡,您可以使用它在VSCode中打开内部终端,这非常适合将所有内容保存在一个地方。打开之后,其实需要安装的东西很少,就是webdriver和selenium的虚拟环境。在终端中输入以下命令:1pip3installvirtualenv2sourcevenv/bin/activate3pip3installselenium激活虚拟环境后,我们就可以开始了。编码现在我们已经确定了我们想要什么(What)以及我们要从哪里得到它(Where),我们必须做“How”部分。创建您的工具,并启动Chrome的驱动程序。1classCoronavirus():2def__init__(self):3self.driver=webdriver.Chrome()这就是我们开始开发所需要的。现在转到您的终端并输入:1python-icoronavirus.py此命令允许我们将该文件用作交互式游乐场。将打开浏览器的一个新选项卡,我们可以开始向它发出命令。如果您想进行试验,可以使用命令行而不是直接在源文件中键入。(不是自用机器人。)终端:1bot=Coronavirus()2bot.driver.get('https://www.worldometers.info/coronavirus/')源代码:1self.driver.get('https://www.worldometers.info/coronavirus/')当我们访问该网站时:将表格作为一个网页元素保存在表格下。为了在网页上找到这个元素,我们使用find_element_by_xpath()并使用它定义的id过滤它。1table=self.driver.find_element_by_xpath('//*[@id="main_table_countries"]/tbody[1]')在这个表中我们需要获取国家,以确保它是我们最初想要找到的国家。1country_element=table.find_element_by_xpath("//td[contains(text(),'China')]")我们再次使用XPath,以“China”为例。由于我们需要“中国”旁边的数据,我们必须确保它属于该行,这就是我们从country_element获取父元素的原因。1row=country_element.find_element_by_xpath("./..")在这一行中,我们拥有我们需要的所有数据我们将把这个字符串分成每一列并将其保存到一个变量中。1data=row.text.split("")2total_cases=data[1]3new_cases=data[2]4total_deaths=data[3]5new_deaths=data[4]6active_cases=data[5]7total_recovered=data[6]8serious_critical=data[7]基本上'data'是一个来自拆分字符串的列表,然后我们将它分散到不同的变量中以备后用。要发送邮件,我们必须设置发送电子邮件服务器,转到谷歌帐户服务,转到“应用程序密码”,在那里你应该生成一个新密码并在这个小脚本中使用它。我们还为我们将收到的电子邮件制作模板:1defsend_mail(country_element,total_cases,new_cases,total_deaths,new_deaths,active_cases,total_recovered,serious_critical):2server=smtplib.SMTP('smtp.gmail.com',587)3server.ehlo()4server.starttls()5server.ehlo()6server.login('email','password')7subject='今天你所在国家的冠状病毒统计数据!8body='今天在'+country_element+'\9\n有关于冠状病毒的新数据:\10\n病例总数:'+total_cases+'\11\n新增病例:'+new_cases+'\12\n死亡总数:'+total_deaths+'\13\n新死亡:'+new_deaths+'\14\n活跃病例:'+active_cases+'\15\n康复总数:'+total_recovered+'\16\n严重、危重病例:'+serious_critical+'\17\n查看链接:https://www.worldometers.info/coronavirus/'18msg=f"Subject:{subject}\n\n{body}"19server.sendmail(20'Coronavirus',21'email',22msg23)24print('嘿,电子邮件已发送!')25server.quit()如果您希望此脚本每天重复,请查看此链接:https://stackoverflow.com/questions/15088037/python脚本每天在同一时间做某事