How To Track Coronavirus In Your Country with Python

With massive outbreaks and news spreading faster than the Coronavirus (COVID-19) itself, we have to be aware of the actual stats that are affecting the areas that we live in.

Today we are going to explore the fact of how you can stay on top of the information for the Coronavirus and do it that fun way, with Python.

I will show you how you can get the data and get the email every day on how many effected people there are and similar information.

I am going to be using a method, which is called Web Scraping and tools Selenium and Python.

Let’s just jump right into it!

Plan the process

First, we have to find where are we going to get our data from. I decided I am going to go with Worldometers for this one, just because I find the data pretty accurate and website good looking.

Here is a table that shows us data by every country affected and with different data in many columns.

This is image title

So what we want to do is to take that data from the table based on the country you want to get the data from and that it sends us an email.

Setting up the environment

You are going to have to install a ChromeDriver, which is going to enable us to manipulate the browser and send commands to it for testing and after for use.

Open the link and download the file for your operating system. I recommend the latest stable release unless you know what you are doing already.

Next up, you need to unzip that file. I would recommend going into Files and doing it manually by right-clicking and then “Extract here”.

This is image title

Inside the folder, there is a file called “chromedriver”, which we have to move to a specific folder on your computer.

Open the terminal and type these commands:

sudo su #enter the root mode
cd      #go back to base from the current location
mv /home/*your_pc_name*/Downloads/chromedriver /usr/local/bin 
#move the file to the right location

Just instead of your_pc_name insert your actual name of the computer.

Once we are done with that, we open the editor. My personal choice is Visual Studio Code. It is straightforward to use, customizable, and light for your computer.

Open a new Project where ever you like and create two new files. This is an example of how mine looks like to help you:

This is image title

In the VS Code, there is a “Terminal” tab with which you can open an internal terminal inside the VS Code, which is very useful to have everything in one place.

When you have that open, there is few more thing we need to install and that is the virtual environment and selenium for web driver. Type these commands into your terminal.

pip3 install virtualenv
source venv/bin/activate
pip3 install selenium

After activating the virtual environment, we are completely ready to go.

Coding

Now that we made sure we know what we want and where we are going to get it from, we have to do the “how” part.

We will create it as a class and make functions for it. So let’s start!

Create your tool with any name and start the driver for Chrome.

class Coronavirus():
  def __init__(self):
    self.driver = webdriver.Chrome()

That is all we need to start developing. Now go to your terminal and type:

python -i coronavirus.py

This command lets us our file as an interactive playground. The new tab of the browser will be opened and we can start issuing commands to it.
If you want to experiment you can use the command line instead of just typing it directly to your source file. Just instead of self use bot.

For Terminal:

bot = Coronavirus()
bot.driver.get('https://www.worldometers.info/coronavirus/')

And now for the source code:

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

When we get to the website, we need to scrape the table mentioned before and we are going to do it this way:

We are going to take the table as the Web element and save it under ‘table’. In order to find that element on the webpage, we use find_element_by_xpath() and filter it by using the id that it was defined under.

table = self.driver.find_element_by_xpath('//*[@id="main_table_countries_today"]/tbody[1]')

This is image title
In that table, we need to get the country to make sure it is the same country that we initially wanted to find.

country_element = table.find_element_by_xpath("//td[contains(., 'USA')]")

Again we use XPath and we find our example of ‘USA’.

Since we need the data next to ‘USA’, we have to make sure it belongs to that row and that is why we are going to take the parent element from the country_element.

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

Inside that row, we get all the data we need and we are just going to split that string into each column and save it into variables.

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]

Basically ‘data’ is a list that came from string splitting and then we just spread it into different variables to use them later.

Send Email

We have to set up the email sending server, go to google account service and go into “Passwords for apps”, there you should generate a new password and use it in this little script.

We also make our template for the email we will receive.

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 + '\
\nThere is new data on coronavirus:\
\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()

And If you want to put this script on repeat each day check out this link.

#python #programming #coronavirus

How To Track Coronavirus In Your Country with Python
65.60 GEEK