Как реализовать парсинг по времени?
Всем добрый день. Подскаите пожалуйста, вот есть парсер. Как сделать так, чтобы он работал каждые 2 часа? Программа запрашивает число (время) как часто нужно парсить сайт, и после этого она каждые (например юзер ввёл 3) 3 часа парсит этот сайт. Но чтобы она не останалвивалась, работала 24/7. Вот есть код, немного глупый, но он с фиксированным временем.
while True:
if datetime.datetime.now().time().hour == 3 or
datetime.datetime.now().time().hour == 6 or
datetime.datetime.now().time().hour == 9 or
datetime.datetime.now().time().hour == 12 or
datetime.datetime.now().time().hour == 15 or
datetime.datetime.now().time().hour == 18 or
datetime.datetime.now().time().hour == 21 or
datetime.datetime.now().time().hour == 24:
main()
else:
pass
time.sleep(3600)
Подскажите, как такое осуществить? Заранее большое спасибо!
Ответы (1 шт):
Автор решения: Just_a_person8
→ Ссылка
Для таких целей вроде есть модуль schedule
Простой пример:
import datetime
import schedule
i = 1
def job():
global i
print(f"Запустился {i} раз")
i += 1
print(datetime.datetime.now())
schedule.every(5).seconds.do(job)
while True:
schedule.run_pending()
Вывод:
Запустился 1 раз
2019-11-01 12:18:27.172611
Запустился 2 раз
2019-11-01 12:18:32.173117
Запустился 3 раз
2019-11-01 12:18:37.173148
Модуль можно настраивать достаточно гибко:
schedule.every(10).minutes.do(job)
#каждые 10 минут
schedule.every().hour.do(job)
# каждый час
schedule.every().day.at("10:30").do(job)
# каждый день в 10-30
schedule.every().monday.do(job)
# каждый понедельник
schedule.every(2).wednesday.at("13:15").do(job)
# Каждую вторую среду в 13-15
schedule.every().minute.at(":17").do(job)
# каждую минуту в 17 секунду
Кроме того, можно передавать параметры в ту функцию, которую мы хотим вызывать:
import schedule
i = 0
def greet(name):
global i
print('Hello', name)
i += 1
if i == 5:
return schedule.CancelJob # Отменяем задачу после 5 запуска
schedule.every(1).to(3).seconds.do(greet, name='Yandex')
# Запускаем задачу в случайное время время от 1 до 3 секунд
while True:
schedule.run_pending()