Google PageSpeed Insights API mit Python abfragen

Mit Lighthouse gibt uns Google ein hervorragendes Tool an die Hand, um die Performance und Usability von einzelnen URLs zu analysieren. Will man nun hin und wieder eine URL checken, so reicht das Web-Interface vollkommen aus. Will man aber kontinuierlich monitoren oder eine Vielzahl von URLs überprüfen, ist der Weg über das Web-Interface nicht mehr ganz so schön.

Um dieses Problem zu umgehen, kann man die PageSpeed Insights API nutzen und die Ergebnisse ganz einfach per Script abrufen. Im Folgenden möchte ich euch meinen Python-Ansatz näher bringen. Mit diesem könnt ihr:

  • mehrer URLs auf einmal abrufen
  • Screenshots und Thumbnails generieren
  • categories festlegen
  • die Ergebnisse in ein Excel-Dokument speichern
  • bei Bedarf die wichtigsten Infos im Terminal ausgeben lassen

Project-Setup und benötigte Libraries

Das Setup des Projektes habe ich relativ simple gemacht. Alle Einstellungen / Settings werden direkt im Script gemacht. Lediglich die Liste an URLs die gecheckt werden sollen sind in einer separaten Datei (urllist.json). Die Ergebnisse, Screenshots und die ursprüngliche Antwort der Pagespeed Insights API werden in einem Testresults-Ordner gespeichert. Hier könnt ihr es euch herunterladen: https://github.com/huber-michael/pagespeed-insight-api-python

Alle Libraries findet ihr in der Datei requirements.txt und ihr könnt sie per

pip install -r requirements.txt

installieren. Am besten verwendet ihr für euer Setup PyCharm, da sich damit Projekte perfekt anlegen und auch z.B. verschieden Python Versionen festlegen lassen.

Nun zum eigentlichen Skript. Im ersten Schritt werden alle Libraries inkludiert, die wir benötigen.

import requests
import json
import os
from binascii import a2b_base64
from pathlib import Path
from urllib.parse import urlparse
from urllib import request
import pandas as pd
import traceback
from datetime import date

Pagespeed Insights API – Settings

Danach geht es mit den Einstellungen weiter.

  • printout: Hier könnt ihr festlegen, ob es eine Ausgabe im Terminal geben soll. Gut für schnelle Adhoc-Checks
  • usecache: Die Ergebnisse der Lighthouse-API werden pro Tag einmal gespeichert. Solltet ihr die Abfrage noch einmal durchführen, wird die gespeicherte Response verwendet. Habt ihr z.B Änderungen durchgeführt und wollt diese nun neu checken, setzt ihr den Wert einfach auf False
  • categorie-list: Hier legt ihr fest, welche Tests die Lighthouse-API durchführen soll.
  • detailsexport: Diese Liste legt fest, für welche Audits detailierte Infos in ein eigenes Excel-Blatt gespeichert werden sollen
  • strategy: desktop oder mobile, da Google aber mittlerweile die meisten Seiten auf mobile-first umgestellt hat, solltet ihr primär mobile verwenden.
  • api-key: Solltet ihr sehr viele Abfragen senden wollen so solltet ihr euch einen API-Key zulegen.
##### SETTINGS ######

printoutput = False #if you want some terminal output just set printout to True
usecache = True #if set to true, saved responses will be used for the current date.
# What Categories to check
categorieslist = ('seo','performance','best-practices')#'accessibility','pwa')
# For which audits to export detailed info
detailsexport = ('resource-summary','network-requests','total-byte-weight','unused-css-rules','errors-in-console','bootup-time','mainthread-work-breakdown','dom-size','unminified-javascript','uses-long-cache-ttl','tap-targets','deprecations','render-blocking-resources','third-party-summary')
# Strategy (mobile or desktop), since google switched to mobile first set to mobile
strategy = 'mobile'
# If you do regular request and automate it, go get an API-Key and put it there
apikey = '' #'&key=YOURKEY'

##### END ######

Execute the Script

Sind alle Settings festgelegt kann das Script durchlaufen. Dabei wird der Request für jede URL die in der urllist.json hinterlegt ist, durchgeführt.

python pagespeedapi.py 

Die Testergebnisse findet ihr dann im entsprechenden Ordner (genau Pfad wird euch im Terminal genannt). Für einen Test von https://www.google.de wäre der relative Pfad ./testresults/www-google-de/2019-10-04/

Dort sind dann

  • Der von google gerenderte finale Screenshot
  • Thumbnails der Seite während des Ladevorgangs
  • Eine Excel-Datei mit den wichtigsten Metriken und Audits.

Damit ihr nich alles per Copy & Paste machen müsst, habe ich ein Github-Repo angelegt. Hier könnt ihr auch die Datein ganz einfach laden.

Dies ist die erste Version des Skriptes und ich werde sicher noch weiter daran arbeiten. Die aktuellen Ergbisse aus der API sind aber schon sehr hilfreich um Problem zu erkennen und eine erste Einschätzung der Performance vornehmen zu können.