Гид по технологиям

Проверка доступности сайтов на Python

4 min read Python Обновлено 18 Dec 2025
Проверка доступности сайтов на Python
Проверка доступности сайтов на Python

Люди работают за ноутбуком: проверка и мониторинг сайтов

Если вы часто берёте данные с веб‑страниц, автоматизация процесса — разумный шаг. Термин «веб‑скрейпинг» обычно используют, когда сайт не предоставляет официального API или фида. Но сначала важно убедиться, что сайт доступен: при недоступности скрипт или сбор данных не сработают.

Если вы управляете своим сайтом, вы наверняка сталкивались с простоем. Это раздражает: теряются посетители и прерываются сервисы. Поэтому полезно уметь быстро проверять доступность сайта.

Python — удобный язык для таких задач. Его лаконичный синтаксис и богатая экосистема позволяют быстро собрать рабочий проверяльщик сайтов.

Создание персонального проверяльщика сайтов

Проверяльщик спроектирован так, чтобы обрабатывать сразу несколько сайтов. Это упрощает добавление или удаление сайтов и даёт лёгкую основу для дальнейшего развития.

Импорт библиотек

Для начала импортируйте библиотеку requests.

import requests

Requests упрощает работу с HTTP: отправку запросов и чтение ответов.

Хранение URL в списке

Сохраните адреса сайтов в списке. Это позволяет проверять сразу несколько адресов.

website_url = [
    "https://www.google.co.in",
    "https://www.yahoo.com",
    "https://www.amazon.co.in",
    "https://www.pipsnacks.com/404",
    "http://the-internet.herokuapp.com/status_codes/301",
    "http://the-internet.herokuapp.com/status_codes/500",
]

Переменная website_url хранит список строк с URL. Замените примеры на ваши адреса по необходимости.

Сообщения для распространённых HTTP‑кодов

Лучше хранить читаемые сообщения по коду ответа в словаре. Это делает вывод понятнее для человека.

statuses = {
    200: "Website Available",
    301: "Permanent Redirect",
    302: "Temporary Redirect",
    404: "Not Found",
    500: "Internal Server Error",
    503: "Service Unavailable",
}

Цикл проверки статусов сайтов

Пройдитесь по списку и отправьте GET‑запрос к каждому URL. В базовом варианте можно оставить try/except для обработки ошибок.

for url in website_url:
    try:
        web_response = requests.get(url)
        print(url, statuses[web_response.status_code])
    except:
        print(url, statuses.get(web_response.status_code, "Request failed"))

Где:

  • for url… — проходит по списку URL.
  • url — текущая строка с адресом.
  • try/except — ловит исключения, например сетевые ошибки.
  • web_response — объект ответа, у которого есть статусный код.

Полный, улучшенный код

Ниже — более надёжная версия: таймаут, явная обработка исключений и значение по умолчанию для неизвестных кодов.

import requests

website_url = [
    "https://www.google.co.in",
    "https://www.yahoo.com",
    "https://www.amazon.co.in",
    "https://www.pipsnacks.com/404",
    "http://the-internet.herokuapp.com/status_codes/301",
    "http://the-internet.herokuapp.com/status_codes/500",
]

statuses = {
    200: "Website Available",
    301: "Permanent Redirect",
    302: "Temporary Redirect",
    404: "Not Found",
    500: "Internal Server Error",
    503: "Service Unavailable",
}

for url in website_url:
    try:
        web_response = requests.get(url, timeout=5)
        message = statuses.get(web_response.status_code, f"HTTP {web_response.status_code}")
        print(url, message)
    except requests.RequestException as e:
        # Явно логируем сетевые и протокольные ошибки
        print(url, "Connection error:", str(e))

Пример запуска и вывода кода показан ниже.

Фрагмент кода из Jupyter Notebook: вывод статусов проверяемых сайтов

Когда такой подход не сработает

  • Сайты, требующие аутентификации или CSRF‑токенов. Простые GET‑запросы вернут страницу входа или ошибку.
  • Защищённые API с rate limit: частые запросы приведут к блокировке.
  • Динамический контент, который рендерится на стороне клиента (JS). requests не выполнит JS.

В этих случаях понадобятся дополнительные инструменты: сессии с авторизацией, управление задержками и заголовками, или headless‑браузер (Selenium, Playwright).

Альтернативные подходы

  • Использовать специализированные сервисы мониторинга (UptimeRobot, Pingdom) — меньше поддержки, но больше удобства.
  • Применять асинхронные запросы (aiohttp) для проверки тысяч сайтов одновременно.
  • Headless‑браузеры для проверки рендеренного контента и взаимодействия с формами.

Простая методология для внедрения

  1. Составьте список URL и ожидаемые коды (200, 301 и т. п.).
  2. Настройте периодический запуск (cron, systemd, облачные функции).
  3. Логируйте результаты и предупреждения в файл или систему мониторинга.
  4. Настройте алёрты (email, Slack) при критических кодах или недоступности.

Чеклист ролей

  • Разработчик: добавить проверку таймаута, обработку исключений, логирование.
  • DevOps: настроить периодический запуск и интеграцию с алёртами.
  • Тестировщик: добавить тестовые случаи для кодов 200, 301, 404, 500 и симуляции таймаута.

Критерии приёмки

  • Скрипт возвращает читаемые сообщения для известных HTTP‑кодов.
  • Скрипт не зависает при недоступности сайта (реагирует на timeout).
  • Ошибки логируются с текстом исключения.
  • Можно добавить или убрать URL без правки кода (подключение конфигурации).

Тестовые случаи

  • Валидный сайт с 200 → вывод “Website Available”.
  • Редирект 301 → вывод “Permanent Redirect”.
  • 404 → вывод “Not Found”.
  • Искусственный таймаут (блокировка) → сообщение об ошибке соединения.

Безопасность и приватность

  • Не храните в коде секреты или токены в открытом виде.
  • Уважайте правила сайта: используйте robots.txt и лимитируйте частоту запросов.
  • При работе с пользовательскими данными соблюдайте требования локального законодательства о персональных данных.

Резюме

Простой скрипт на Python позволяет быстро проверять доступность сайтов и понимать их статус по HTTP‑кодам. Улучшения — таймауты, обработка исключений, логирование и асинхронность — делают решение надёжным и масштабируемым. Для сложных сценариев рассмотрите headless‑браузеры или внешние сервисы мониторинга.

Важно: начинайте с малого, автоматизируйте базовые проверки и постепенно добавляйте безопасность, алёрты и отчётность.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как пожаловаться на пользователя в Snapchat
соцсети

Как пожаловаться на пользователя в Snapchat

Связывание заметок в Apple Notes на iPhone
iOS

Связывание заметок в Apple Notes на iPhone

Лазерная гравировка по стеклу — практическое руководство
DIY

Лазерная гравировка по стеклу — практическое руководство

PayPal в Apple ID: добавить и удалить
Инструкции

PayPal в Apple ID: добавить и удалить

Как безопасно стереть SSD — полное руководство
SSD

Как безопасно стереть SSD — полное руководство

Выгрузка приложений на iPhone и iPad
iOS

Выгрузка приложений на iPhone и iPad