Scraping Covid-19 statistics using BeautifulSoup

29 Dec, 2020
Coronavirus, one of the biggest pandemic has brought all the world to Danger. Along with this, it is one of the trending News, everyone has this day. In this article, we will be scraping data and printing Covid-19 statistics in human-readable form. The data will be scraped from this websitePrerequisites: 
The libraries ‘requests’, ‘bs4’, and ‘texttable’ have to be installed – 
pip install bs4
pip install requests
pip install texttable

Project : Let’s head over to code, create a file called run.py. 
Python3
# importing modulesimport requestsfrom bs4 import BeautifulSoup # URL for scrapping dataurl = 'https://www.worldometers.info/coronavirus/countries-where-coronavirus-has-spread/' # get URL htmlpage = requests.get(url)soup = BeautifulSoup(page.text, 'html.parser') data = [] # soup.find_all('td') will scrape every# element in the url's tabledata_iterator = iter(soup.find_all('td')) # data_iterator is the iterator of the table# This loop will keep repeating till there is# data available in the iteratorwhile True:    try:        country = next(data_iterator).text        confirmed = next(data_iterator).text        deaths = next(data_iterator).text        continent = next(data_iterator).text         # For 'confirmed' and 'deaths',        # make sure to remove the commas        # and convert to int        data.append((            country,            int(confirmed.replace(', ', '')),            int(deaths.replace(', ', '')),            continent        ))     # StopIteration error is raised when    # there are no more elements left to    # iterate through    except StopIteration:        break # Sort the data by the number of confirmed casesdata.sort(key = lambda row: row[1], reverse = True)
To print the data in human-readable format, we will use the library ‘texttable‘ 
Python3
# create texttable objectimport texttable as tttable = tt.Texttable() # Add an empty row at the beginning for the headerstable.add_rows([(None, None, None, None)] + data) # 'l' denotes left, 'c' denotes center,# and 'r' denotes righttable.set_cols_align(('c', 'c', 'c', 'c')) table.header((' Country ', ' Number of cases ', ' Deaths ', ' Continent ')) print(table.draw())
Output: 
+---------------------------+-------------------+----------+-------------------+
|          Country          |  Number of cases  |  Deaths  |     Continent     |
+===========================+===================+==========+===================+
|       United States       |      644348       |  28554   |   North America   |
+---------------------------+-------------------+----------+-------------------+
|           Spain           |      180659       |  18812   |      Europe       |
+---------------------------+-------------------+----------+-------------------+
|           Italy           |      165155       |  21645   |      Europe       |
+---------------------------+-------------------+----------+-------------------+
...



NOTE: The output depends on the current statisticsStay home, stay safe! 
manroopparmar120
Python web-scraping-exercises
Python-BS3
Web-scraping
Python
Python Programs
Write From Home
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Different ways to create Pandas Dataframe
Enumerate() in Python
Python String | replace()
How to Install PIP on Windows ?
*args and **kwargs in Python
Defaultdict in Python
Python | Get dictionary keys as a list
Python | Convert a list to dictionary
Python Program for Fibonacci numbers
Python | Convert string dictionary to dictionary