Создать URL
Генератор Правила транслитерации Как сделать ЧПУ Блог Вопросы и ответы Создать URL
Практика

Скрипт для проверки кодов ответа списком

Напишем простой инструмент для массовой проверки и разберём, как использовать его аккуратно.

Когда нужен такой скрипт

Краулер обходит сайт по ссылкам, но иногда список адресов уже есть: выгрузка из панели вебмастера, карта соответствий переезда, адреса из отчёта ошибок. Нужно быстро проверить, какие из них отвечают 200, а какие — перенаправляют или возвращают ошибку. Скрипт делает это за минуты.

Скрипт на Python

import csv
from concurrent.futures import ThreadPoolExecutor
import requests

def check(url):
    try:
        r = requests.get(url, allow_redirects=False, timeout=10,
                         headers={"User-Agent": "url-check/1.0"})
        return url, r.status_code, r.headers.get("Location", "")
    except requests.RequestException as e:
        return url, "error", str(e)

with open("urls.txt", encoding="utf-8") as f:
    urls = [line.strip() for line in f if line.strip()]

with ThreadPoolExecutor(max_workers=5) as pool:
    results = list(pool.map(check, urls))

with open("result.csv", "w", newline="", encoding="utf-8") as out:
    csv.writer(out).writerows(results)

Скрипт читает адреса из файла, отправляет запросы в пять потоков и записывает в таблицу адрес, код ответа и, для перенаправлений, адрес назначения. Требуется библиотека requests.

Как это устроено

Устройство скрипта
ЭлементЗачем
allow_redirects=FalseПоказывает сам код перенаправления, а не конечную страницу
timeout=10Не зависать на медленных ответах
Пользовательский агентОтличать проверку в журнале сервера
Пул из нескольких потоковУскоряет проверку без чрезмерной нагрузки
Обработка исключенийОшибки соединения записываются, а скрипт не останавливается
Запись в таблицуУдобный разбор и сравнение с прошлыми проверками

Как разбирать результат

Отфильтроватьпо кодуСгруппироватьпо типамНайтиобщие причиныИсправитьи повторить
Отфильтроватьпо кодуСгруппироватьпо типамНайтиобщие причиныИсправитьи повторить
Порядок разбора результатов
  • 200 — страница доступна, проверьте, что это нужная страница.
  • 301, 308 — постоянные перенаправления: проверьте, что они ведут на нужные адреса: 301 и 302.
  • 302, 307 — временные перенаправления: часто настроены ошибочно.
  • 404, 410 — страницы нет: битые ссылки.
  • 5xx — ошибки сервера: диагностика.
  • error — ошибка соединения или превышено время ожидания.

Аккуратность

  1. Не запускайте слишком много потоков: пять-десять достаточно, а для слабых серверов меньше.
  2. Не проверяйте чужие сайты массово: это создаёт нагрузку, а некоторые ресурсы блокируют такие запросы.
  3. Если сервер не принимает запросы без браузерного заголовка, добавьте нужные заголовки или проверьте вручную.
  4. Для адресов с параметрами и метками помните: метки не должны попасть в статистику, если проверка идёт по боевому счётчику: источник трафика при перенаправлениях.

Как развить скрипт

Связанные материалы. Проверка кодов из командной строки — в статье про проверку исходящих ссылок, а сверка старых и новых адресов — в статье сравнение адресов до и после переезда. Общие принципы — в статье про коды ответа сервера.

Частые вопросы

Зачем отключать автоматическое следование перенаправлениям?

Чтобы увидеть сам код перенаправления и его адрес назначения, а не конечную страницу; так видно, какие адреса перенаправляют и куда.

Сколько потоков использовать при проверке?

Обычно пять-десять; для слабых серверов и чужих сайтов — меньше, чтобы не создавать заметной нагрузки.

Как проверить, куда ведёт цепочка перенаправлений?

Расширить скрипт: следовать по перенаправлениям, записывать каждый шаг и считать их число.

Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.

Читайте также