Проверка скорости заргрузки сайта используя Python


Проверка скорости заргрузки сайта используя Python

Скорость загрузки сайта является одним из осоновных показателей для продвижения сайта, это показал последний апдейт Google. Каждый SEO специалист проводя аудит сайта старается максимально увеличить скорость загрузки, но как проверить страницы на скорость загрузки, можно использовать сторонние сервисы платные или бесплатные но с ограниениями или же прибегнуть к более альтернативным методам.

Проверить скорость загрузки каждой страницы вручную, довольно трудоемкая и неблагодарная работа. Встречаются и те, кто проверяет скорость загрузки только главной). И даже проверив основные страницы на скорость загрузки, хочется время от времени контролировать данную статистику, так как возможно вляние многих факторов на скорость и разработчик может сделать минимальные правки кода, а скорость загрузки уменьшится в несколько раз. Но заметить это можно не сразу, что приведет к проседанию позиций.

Мы решили создать небольшой код, который будет автоматически проводить проверку скорости загрузки сайтов и страниц сайта, так как ограничение на проверку через API Google pagespeed 25.000, это будет намного приятее и удобнее. Фото ниже:

Лимит на использование API Google pagespeed

Для начала нам необходимо будет получить ключ API, всю нформацию, в том числе как получить ключ вы можете получить на странице справочной информации google.

Следующим шагом импортируем библиотеки, которые необходимы для работы:


    import urllib.request, json
    import re
    import pandas as pd

Создаем текстовый документ в переменной среде path, у нас он будет называться как всегда)) 1.txt, в него мы поместим все URL сайтов, скорость которых необходимо проверить. Затем возвращаемся к коду и считываем построчно данные из файла, также создадим пустой словарь для дальнейшего формирования результатов в таблицу с помощью pandas + добавляем переменную key в которой укажем ключ API, который получен через сервисы google (ссылка на инструкцию указана выше):


    f = open('1.txt')
    s = f.readline()
    d = {}
    key = "указываем ключ google API"

Для того, чтобы пройти по всем URL из файла создадим цикл, который будет отрабатывать, пока не пройдет все строки с URL в файле:


    while(s):

С помощью регулярных выражений и библиотеки re удаляем все лишние символы в нашем URL, чтобы избежать переносов строк и других ненужных нам символов:


    s = re.sub("^\s+|\n|\r|\s+$", '', s)

Формируем URL запроса для получения скорости загрузки:


    url = "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=" \
    + s + "&strategy=mobile&locale=en&key=" + key

Попытаемся отправить запрос с помощью urllib.request и получить данные в формате json в ответ на наш запрос, если URL рабочий и верно указан, код отработает и мы получим ответ, который будет храниться в переменной data, затем в переменную overall_score получим нужные нам данные из переменной data.

После этого добавим данные в переменную d (URL и код ответа для формирования таблицы)


     try:
        response = urllib.request.urlopen(url)
        data = json.loads(response.read())
        overall_score = data["lighthouseResult"]["categories"]["performance"]["score"] * 100
        d.setdefault("URL", []).append(s)
        d.setdefault("Скорость", []).append(overall_score)

Если URL указан неверно или анализ невозможен, создадим исключение, которое отработает, если произойдет ошибка сканирования, и добавим эти данные, как и ранее в переменную d:


    except:
        d.setdefault("URL", []).append(s)
        d.setdefault("Скорость", []).append("Ошибка сканирования, проверьте указанный URL")

И завершим наше исключение с помощью finally (будет выполнено в любом случае при использовании исключения), перейдем к чтению следующего домена из нашего файла:


    finally:
        s = f.readline()

Когда цикл завершит свою работу, а завершит он ее после прохода всех URL в текстовом файле 1.txt, создадим DataFrame с помощью pandas получив данные из переменной d


    df = pd.DataFrame(data=d)

У нас есть DataFrame, но такие данные использовать неудобно и проблематично, поэтому мы перенесем данные в таблицу Excel, таблица будет создана автоматически в переменной среде path:


    df.to_excel('./googlepagespeed.xlsx')

Таким образом, запустив данный код, можно перейти к выполнению других задач, по завершению, у вас будет сформирована готовая таблица со скоростью загрузки всех URL

Ниже приведем полный код, для удобного копирования:


    import urllib.request, json
    import re
    import pandas as pd


    f = open('1.txt')
    s = f.readline()
    d = {}
    key = "AIzaSyDnrXzh2IbgCVUX-7cxUV_a7hcyhBHDWh4"

    while(s):
        s = re.sub("^\s+|\n|\r|\s+$", '', s)
        url = "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=" \
        + s + "&strategy=mobile&locale=en&key=" + key
        try:
            response = urllib.request.urlopen(url)
            data = json.loads(response.read())
            overall_score = data["lighthouseResult"]["categories"]["performance"]["score"] * 100
            fcp = data["loadingExperience"]["metrics"]["FIRST_CONTENTFUL_PAINT_MS"]["percentile"] /1000
            fid = data["loadingExperience"]["metrics"]["FIRST_INPUT_DELAY_MS"]["percentile"] /1000
            lcp = data["loadingExperience"]["metrics"]["LARGEST_CONTENTFUL_PAINT_MS"]["percentile"] /1000
            cls = data["loadingExperience"]["metrics"]["CUMULATIVE_LAYOUT_SHIFT_SCORE"]["percentile"]
            d.setdefault("URL", []).append(s)
            d.setdefault("Скорость", []).append(overall_score)
            d.setdefault("fcp", []).append(fcp)
            d.setdefault("fid", []).append(fid)
            d.setdefault("lcp", []).append(lcp)
            d.setdefault("cls", []).append(cls)

        except:
            d.setdefault("URL", []).append(s)
            d.setdefault("Скорость", []).append("Ошибка сканирования, проверьте указанный URL")
            d.setdefault("fcp", []).append("-")
            d.setdefault("fid", []).append("-")
            d.setdefault("lcp", []).append("-")
            d.setdefault("cls", []).append("-")
        finally:
            s = f.readline()

    df = pd.DataFrame(data=d)
    df.to_excel('./googlepagespeed.xlsx')

Подписывайтесь на наш телеграм канал @py4seo, мы уже работаем над следующим контентом...если код был вам полезен, отправьте его своим друзьям и знакомым, это поможет узнать о нашем канале, а нам публиковать больше нового полезного контента.

И самое важное, помните, что в Python нужно соблюдать отступы или один таб или 4 пробела, код нужно привести к такому виду как он указан на сайте, если при копировании (такое бывает довольно часто) количество отступов изменилось или они пропали вообще.