Python Script to Measure Webpage Carbon Footprint

Ever wondered what Carbon Footprint your webpage left behind?

Let’s first establish what a Carbon Footprint is.

In the words of Emich.edu

A carbon footprint is the total greenhouse gas (GHG) emissions caused directly and indirectly by an individual, organization, event or product.

The internet consumes a lot of electricity and the same electricity (at least a large part of it) is generated while leaving the carbon footprint by emitting carbon emissions.

All the websites worldwide are powered by data centres which emit C02 emissions as the webpages are downloaded, served & consumed.

To be environmentally friendly & ensure that we are helping the environment it is essential that we make sure that our sites don’t emit a large amount of C02 emissions which will hurt the environment.

To evaluate the C02 emissions that the web pages emit in terms of Grams & Litres. I have built a Python Script that will help you measure these metrics.

Here is the Link to the Google Colab Notebook – https://colab.research.google.com/drive/1HwXVjj9VFARO-ow5nxD2HpHVDLxxDy3Q?usp=sharing

Here are the Script blocks which you can execute in the Google Colab Notebook

Step 1 – Install the libraries

				
					# Install required libraries
!pip install requests pandas
				
			

Step 2 – Specify the List of URLs you want to get the scores for

				
					# List of URLs to analyze
urls = [
    "https://www.decodedigitalmarket.com/wikipedia-api-python-topical-map-visualize/",
    "https://www.decodedigitalmarket.com/bert-vector-embeddings-compare-between-webpages-competitor/",
    "https://www.decodedigitalmarket.com/bert-vector-embeddings-compare-between-webpages-competitor/",
    "https://www.decodedigitalmarket.com/visualize-mom-url-clicks-search-console-api-python/"
    # Add more URLs as needed
]
				
			

Step 3 – Imports & calling the API

We will be utilizing the API from api.websitecarbon.com

				
					import requests
import pandas as pd
import time

# Initialize a list to store the results
results = []

# Base API endpoint
api_base = "https://api.websitecarbon.com/site"

# Iterate over each URL in the list
for url in urls:
    try:
        # Prepare the request parameters
        params = {'url': url}

        # Make the GET request to the API
        response = requests.get(api_base, params=params)

        # Check if the request was successful
        if response.status_code == 200:
            data = response.json()

            # Extract the tested URL (handles redirects or modified URLs)
            tested_url = data.get('url', url)

            # Determine if the hosting is green
            green = data.get('green', 'unknown')

            # Extract CO2 emissions data
            co2_data = data.get('statistics', {}).get('co2', {})

            # Prefer 'grid' data; fallback to 'renewable' if 'grid' is unavailable
            grid_co2 = co2_data.get('grid', {})
            renewable_co2 = co2_data.get('renewable', {})

            grams = grid_co2.get('grams') if grid_co2 else renewable_co2.get('grams', 'N/A')
            litres = grid_co2.get('litres') if grid_co2 else renewable_co2.get('litres', 'N/A')

            # Append the data to the results list
            results.append({
                'URL': tested_url,
                'Green Hosting': green,
                'Grams CO2': grams,
                'Litres CO2': litres
            })
        else:
            print(f"Failed to retrieve data for {url}. Status Code: {response.status_code}")
            results.append({
                'URL': url,
                'Green Hosting': 'Error',
                'Grams CO2': 'Error',
                'Litres CO2': 'Error'
            })
    except Exception as e:
        print(f"An error occurred for {url}: {e}")
        results.append({
            'URL': url,
            'Green Hosting': 'Error',
            'Grams CO2': 'Error',
            'Litres CO2': 'Error'
        })

    # Optional: Pause between requests to respect API rate limits
    time.sleep(1)  # Adjust as needed based on API guidelines

# Create a pandas DataFrame from the results
df = pd.DataFrame(results)

# Display the DataFrame
df
				
			

After this step, you can see the data visualized in a data frame

Website-Carbon-Footprint-Calculation-Python-Script-Colab

Step 4 – Download the results in a CSV

				
					# Define the CSV filename
csv_filename = 'website_carbon_emissions.csv'

# Save the DataFrame to a CSV file
df.to_csv(csv_filename, index=False)

# Download the CSV file
from google.colab import files
files.download(csv_filename)
				
			

And that’s it! With this, you will get the scores. I have tested 4 blog post URLs and all 4 of them are below 0.3 Grams.

How does the rating system work?

CO2 Emissions per Pageview

RatingGrams CO2e per pageview
A+0.095
A0.186
B0.341
C0.493
D0.656
E0.846
F≥ 0.847

Based on this rating system to achieve A+ Score, the web page can’t emit C02 grams more than 0.095

This is why my web page falls into the B Rating.

Leave a Comment