Начинающие пользователи часто не уделяют достаточно внимания данному аспекту, делая основной упор именно на извлечении нужной информации. Однако при переходе к практике неизбежно возникают различные ошибки в процессе работы скрипта, при этом не всегда возможно сразу определить источник проблемы.
Для повышения общей стабильности кода и важно знать особенности отслеживание и обработки статус-кодов. Во многих случаях это заметно упрощает поиск и устранение ошибок в логике, часто дает возможность избежать блокировки со стороны сайта.
Коды принято разбивать на следующие группы:
Информационные 100 — 199
Успешные 200 — 299
Перенаправления 300 — 399
Клиентские ошибки 400 — 499
Серверные ошибки 500 — 599
В большинстве случаев программиста интересует именно код 200, поскольку он означает успешный ответ с сервера.
Краткое описание основных статус-кодов
301 — ресурс переехал на новый URL. Парсеру следует перейти по новому адресу для продолжения работы;
302 — ресурс временно переехал. Парсер может перейти по новому адресу, но стоит помнить, что это перенаправление временное;
400 — неверный запрос. Это может быть связано с неверно сформированным запросом или заголовками;
403 — доступ к ресурсу запрещен. Сервер понял запрос, но он отказывается его выполнять. Обычно это связано с ограничениями доступа, например, нужна авторизация;
404 — ресурс не найден. Этот код часто встречается, если вы пытаетесь парсить несуществующую страницу;
429 — слишком много запросов. Это указывает на то, что вы превысили лимит запросов и должны подождать. Если ошибка возникает часто, то необходимо изменить логику работы скрипта;
500 — внутренняя ошибка сервера. Это может быть связано с временными проблемами на сервере;
502 — неверный шлюз. Обычно связано с проблемами на стороне сервера, которые парсер не может контролировать;
503 — сервис недоступен. Сервер временно не может обработать запросы, возможно, из-за перегрузки или технических работ.
200 «Успешно». Запрос успешно обработан.
Статус коды требуют разного подхода при организации работы парсера. Некоторые из них требуют внесения заметных изменений в программный код. Часто для решения проблемы необходимо просто добавить паузы для снижения нагрузки или изменить алгоритм формирования заголовков. Чтобы выбрать оптимальный режим обхода ошибок и необходимо знать их коды.
При помощи атрибута status_code можно вывести полученный код.
import requests url = 'http://httpbin.org/' response = requests.get(url) print(response.status_code)
В консоль будет выведен код 200, если изменить адрес на заведомо некорректный, код смениться на 404, что вполне ожидаемо.
При помощи условного оператора можно сразу организовать обработку отдельных кодов, чтобы программа пыталась устранить проблему или корректно остановила работу с выводом сообщения.
import requests url = 'http://httpbin.org/' response = requests.get(url) if response.status_code == 200: print("status_code OK") else: print("status_code NOT OK")
Это может пригодиться, когда сервер при превышении определенного лимита просто перестает возвращать запрошенную информацию. Для восстановления работоспособности достаточно добавить дополнительную паузу. Такое поведение предпочтительнее, чем просто остановка работы программы.
import requests import time url = 'http://httpbin.org/' response = requests.get(url) if response.status_code != 200: time.sleep(60) else: print("status_code OK... Continue execute code...")