Когда нужен такой скрипт
Краулер обходит сайт по ссылкам, но иногда список адресов уже есть: выгрузка из панели вебмастера, карта соответствий переезда, адреса из отчёта ошибок. Нужно быстро проверить, какие из них отвечают 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 — ошибка соединения или превышено время ожидания.
Аккуратность
- Не запускайте слишком много потоков: пять-десять достаточно, а для слабых серверов меньше.
- Не проверяйте чужие сайты массово: это создаёт нагрузку, а некоторые ресурсы блокируют такие запросы.
- Если сервер не принимает запросы без браузерного заголовка, добавьте нужные заголовки или проверьте вручную.
- Для адресов с параметрами и метками помните: метки не должны попасть в статистику, если проверка идёт по боевому счётчику: источник трафика при перенаправлениях.
Как развить скрипт
- Добавить проверку конечного адреса цепочки: следовать по перенаправлениям и считать число шагов: цепочки перенаправлений.
- Сравнивать ожидаемый адрес назначения из карты соответствий с фактическим.
- Запускать по расписанию и сохранять результаты: как проверить все перенаправления сразу.
Связанные материалы. Проверка кодов из командной строки — в статье про проверку исходящих ссылок, а сверка старых и новых адресов — в статье сравнение адресов до и после переезда. Общие принципы — в статье про коды ответа сервера.
Частые вопросы
Зачем отключать автоматическое следование перенаправлениям?
Чтобы увидеть сам код перенаправления и его адрес назначения, а не конечную страницу; так видно, какие адреса перенаправляют и куда.
Сколько потоков использовать при проверке?
Обычно пять-десять; для слабых серверов и чужих сайтов — меньше, чтобы не создавать заметной нагрузки.
Как проверить, куда ведёт цепочка перенаправлений?
Расширить скрипт: следовать по перенаправлениям, записывать каждый шаг и считать их число.
Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.