Перезапуск функции python
Есть проблема. Как мне перезапустить функцию function1_request?
import requests
from bs4 import BeautifulSoup as BS
import time
def function1_request(url):
HEADERS = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.152 YaBrowser/21.2.3.100 Yowser/2.5 Safari/537.36'
}
ret_url = requests.get(url, HEADERS)
ret_url1 = str(ret_url)
voz_normal = ret_url1.find('200')
voz_rate_limit = ret_url1.find('429')
if voz_normal != -1:
return ret_url
elif voz_rate_limit == -1:
print('fawwfa')
time.sleep(600)
#здесь нужно начать функцию заново
else:
print('Ошибка в распознавании')
exit()
Ответы (2 шт):
Автор решения: gil9red
→ Ссылка
Добавил пример зацикливания, сделал рефакторинг
Алгоритм:
- Функция повторяет вызов и если результат успешный (200), то сразу выполняется выход из функции
- Если результат 429 Too Many Requests, то засыпаем на 10 минут и на следующей итерации повторим запрос
- Если в результате что-то другое, то выходим из функции, возвращая
None
Пример:
import requests
from bs4 import BeautifulSoup as BS
import time
def function1_request(url):
HEADERS = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.152 YaBrowser/21.2.3.100 Yowser/2.5 Safari/537.36'
}
while True:
rs = requests.get(url, HEADERS)
if rs.status_code == 200:
return rs
elif rs.status_code == 429:
print('fawwfa')
time.sleep(600)
else:
print('Ошибка в распознавании')
return
url = ...
rs = function1_request(url)
if not rs:
exit()
print(rs)
Автор решения: VeySheng
→ Ссылка
А можно вот так вот?
import requests
from bs4 import BeautifulSoup as BS
import time
def function1_request(url):
HEADERS = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.152 YaBrowser/21.2.3.100 Yowser/2.5 Safari/537.36'
}
ret_url = requests.get(url, HEADERS)
ret_url1 = str(ret_url)
voz_normal = ret_url1.find('200')
voz_rate_limit = ret_url1.find('429')
if voz_normal != -1:
#print('Работает')
return ret_url
elif voz_rate_limit != -1:
print('Поймал временный бан из-за запросов')
time.sleep(600)
return function1_request(url)
else:
print('Ошибка в распознавании')
print(ret_url)
exit()