Python. Проверка статуса url.

Рассмотрим скрипт проверки кода состояния веб-ресурса на языке Python.

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

Код состояния HTTP - код ответа веб-сервера, представляющий собой целое число из трёх десятичных цифр, где первая цифра указывает на класс состояния. За кодом такого ответа обычно следует текстовое объяснение.

Примеры кодов:

1xx: Informational (информационные)
    102 Processing («идёт обработка»)
2xx: Success (успешно)
    200 OK («хорошо»)
3xx: Redirection (перенаправление)
    301 Moved Permanently («перемещено навсегда»)
4xx: Client Error (ошибка клиента)
    404 Not Found («не найдено»)
5xx: Server Error (ошибка сервера)
    500 Internal Server Error («внутренняя ошибка сервера»)

Проанализировав код состояния, можно сделать вывод о доступности того или иного веб-ресурса.

Напишем скрипт проверки кода состояния на Python.

Нам потребуется входной файл, содержащий список проверяемых url: url_list.csv

slice.by
http://slice.by
https://slice.by

После запуска скрипта через некоторое время собранные коды будут помещены в выходной файл url_status.csv

Скрипт проверки url:

# чекер кода состояния
import requests
import csv
import time
import urllib3

urllib3.disable_warnings()

SLEEP = 0  # время в секундах между следующими запросами
url_list = []
url_statuscodes = []
url_statuscodes.append(["url", "status_code"])  # установка заголовков выходного файла


def getStatuscode(url):
    try:
        r = requests.head(url, verify=False, timeout=5)  # для ускорения делаем запрос заголовка
        return (r.status_code)

    except:
        return -1


# проверяемые url во входном файле
# используйте один url в строке
with open('url_list.csv', newline='') as f:
    reader = csv.reader(f)
    for row in reader:
        url_list.append(row[0])


# проход всего списка url
for url in url_list:
    print(url)
    check = [url, getStatuscode(url)]
    time.sleep(SLEEP)
    url_statuscodes.append(check)

# Выходной файл
with open("url_status.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerows(url_statuscodes)

Содержимое выходного файла:

url,status_code
slice.by,-1
http://slice.by,301
https://slice.by,200

Первая строка - не указан протокол.

Вторая строка - ответ сервера о переадресации, так как происходит переадресация на https.

Третяя строка - ответ ОК, url доступен.

Александр Ляхович

Александр Ляхович

Автор "Блога из ломтиков. Заметки продолжающего веб-разработчика". Системный администратор, продолжающий web-разработчик, радиоинженер. Более 7 лет занимаюсь сайтостроением и изучаю данную область.