Форум программистов, компьютерный форум, киберфорум
Python: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 23.03.2023
Сообщений: 2

Хочу получить от requests.get(URL) простой ответ вместо "исключительной ситуации"

23.03.2023, 16:06. Показов 1198. Ответов 2

Студворк — интернет-сервис помощи студентам
На python раньше не писал. Моим основным занятием является разработка электронных устройств и их программирование. Т.е, как понимаете, от плюсов и ASM далеко не отхожу.
Но недавно нужно было написать коротенький код, который автоматизирует работу мартшки.
Работа у обезьянки такова:
Есть список сайтов в Excel (изначально 250 сайтов и теперь добавляются каждый день).
Нужно каждое утро проверять на открываемость эти сайты.
Как делает это обезьянка? Совершенно верно! - из Excel - Ctrl копи, в браузер - Ctrl вставил. И так по всему списку.
Во истину
Контрл Копи, Контрл Вставил,
Ни в голове, ни в попе ни хрена не оставил.
Вобщем не буду вдаваться в подробности как я оказался в этой компании, но меня по случаю попросили помочь примату, т.е. автоматизировать его труд. И я согласился. И возрадовались они.
С выбором инструмента (языка и средcnв разработки) я особо не заморачивался. Просто наугад выбрал Python, тем более у них на машине уже стоял PyCharm и Python3.
Кстати я совсем не жалею что выбрал именно Python (Они нашли друг друга из толпы случайно, как две половинки одного целого...... И жили они долго и счастливо.)
Ладно хватит лирики, Ближе к делу.
Я апошел следующим путем:
1. Вытащил список сайтов из Excel в обычный текстовый файл (например URLlist.txt) и оформил их там списком.
2. Далее в теле основной программы я поочереди в цикле for достаю из файла URLlist.txt по одному адресу как URLstr и делаю
с ним следующее:
Python
1
2
         res = requests.get(URLstr)
         print(str(res.status_code))
3. Результаты выполнения GET запроса постепенно накапливаются в отдельном текстовом файле report.txt
4. Потом по завершению проверки всех адресов сайтов все результаты из файла report.txt переписываются в файл xls с
заданным форматированием и т.п.
Четвертый пункт делается для того чтобы хозяин обезьянки ни чего не заподозрил. А то увидит как все стало легко и просто и решит что бедный зверек мало загружен работой. С вытекающими последствиями.

Вобщем обезьянка стала счастливой и довольной.
И сказал я - это хорошо.

Ну а у меня как человека, пытающегося победить зло до конца, осталась в душе одна нерешенная задача, Которую надеюсь с вашей помощью решить.
На самом деле конструкция
Python
1
2
    res = requests.get(URLstr)
    print(str(res.status_code))
выглядит безобидно.
Но дело в том что проверяются сайты, которые на данный момент могут оказаться недоступны по разным причинам. Вот эти причины по которым недоступны сайты я и пытаюсь коллекционировать. Т.е. в отчете писать не только "не доступен", но и указывать причину.
Казалось бы res.status_code и возвращает тот самый код в котором указывается причина отказа, но не тут то было.
Как только происходит попытка выполнить requests.get(URLstr), а URLctr оказался из тех кто не в порядке, в программе сразу происходит ошибка и в окне выполнения я получаю "Process finished with exit code 1"
Та делов то! подумал я и сразу сделал подобную конструкцию:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    try:
        res = requests.get(URLstr, timeout=5)
        outStr = str(res.status_code)
    except requests.exceptions.HTTPError:
        outStr = "HTTPError"
 
    except requests.exceptions.BaseHTTPError:
        outStr = "BaseHTTPError"
 
.   #...... вобщем здесь аналогичным образом перечисляются все возможные except requests.exceptions.
 
    except requests.exceptions.ConnectionError:
        outStr = "ConnectionError"
 
    except requests.exceptions.RequestException:
        outStr = "RequestException"
 
    finally:
        print(outStr)
Вообщем как видите неплохой такой костыль получается.
А мне ОБЕЩАЛИ! разные гугру, пишущие сайты о библиотеке requests, что если я, например поменяю в адресе сайта хотя бы одну букву и подставлю в requests.get название несуществующего сайта, то в ответ я должен буду получить код 404 а не вылет программы и не должен буду обрабатывать exceptions вручную.
Вот собственно и вопрос - как получить от requests.get(URL) (если URL не открывается) адекватный ответ с кодом статуса а не ошибку выполнения?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.03.2023, 16:06
Ответы с готовыми решениями:

Обработчик исключительной ситуации
Задание: Определить обработчик исключительной ситуации, если количество созданных объектов класса А превышает заданное значение. Не знаю...

Возбуждение исключительной ситуации
Помогите плз сгенерировать исключение. Требуется создать функцию, которая заполняет массив и возвращает true если это сделать удается,...

Возвращение исключительной ситуации
Всем привет... из темы, конечно, ничего не понятно =) Итак, у нас есть функция. У функции есть правильный ход исполнения. Предположим...

2
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
23.03.2023, 16:33
VMR, заметно что от плюсов вы далеко не отходите и это хорошо. Надо было спросить у обезьянки, которая по вашей вине скоро потеряет работу - как работает веб? И она бы сказала, что 404 и прочие ошибки возвращает сервер, то есть ТА сторона запроса(отвечающая), а эта сторона, то есть наш клиент в виде браузера или реквестс получает то, что получает, не более. Если владелец сервака не позаботился кидать 404 на кривые урлы то этого не будет, естественно если сайта больше нет по урлу то тоже просто некому вернуть 404, просто самого сервера нет.
Так что перехваты ХТТП ошибок -вполне себе нормальный подход. Коды ошибок можно получить только от верно настроенного сервака.

я бы еще сделал парсинг ексельки, чтобы выкинуть из схемы текстовый файл, перебор в многопоточке и вместо гет head запрос, так будет побыстрее.
1
0 / 0 / 0
Регистрация: 23.03.2023
Сообщений: 2
23.03.2023, 17:42  [ТС]
Спасибо. Более менее понятно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.03.2023, 17:42
Помогаю со студенческими работами здесь

Обработка исключительной ситуации
Здравствуйте, Друзья. Подскажите, пожалуйста, как обработать следующую ситуацию: если во время выполнения указанного ниже кода, не вводя...

Обработка исключительной ситуации
Здраствуйте! Пишу диплом и столкнулся с такой проблеммой. Иногда выскакивает такая ошибка: "Невозможно добавление или изменение...

Обработка исключительной ситуации
Приветствую всех, суть вопроса в том, что внутри цикла выполняю запросы в базу, допустим 100 ра с разными данными и например 54 запрос...

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

Обработка исключительной ситуации с файлом
нужно сделать обработку исключительной ситуации- невозможность открыть файл. здесь на try выплывает необработанное исключение. fstream...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru