Рассмотрим скрипт проверки кода состояния веб-ресурса на языке 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 доступен.