start.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import requests
  2. from bs4 import BeautifulSoup as bs
  3. from datetime import datetime
  4. import logging
  5. logfile = 'data.log'
  6. logging.basicConfig(filename=logfile,
  7. format='%(asctime)s %(levelname)-2s %(message)s',
  8. filemode='w',
  9. datefmt='%Y-%m-%d %H:%M:%S',
  10. level=logging.INFO)
  11. def get_data(url):
  12. r = requests.get(url)
  13. html = bs(r.text, 'html.parser')
  14. title_channel = html.title.string
  15. try:
  16. last_post_date = html.find_all('time')[-1]['datetime']
  17. except IndexError:
  18. return
  19. else:
  20. # 2021-12-24T09:42:43+00:00
  21. last_post_date = datetime.strptime(
  22. last_post_date, "%Y-%m-%dT%H:%M:%S%z")
  23. title_channel = title_channel.split(' – ')[0]
  24. return {
  25. 'title_channel': title_channel,
  26. 'last_post_date': datetime.strftime(last_post_date, '%Y-%m-%d %H:%M')
  27. }
  28. print("СТАРТ. Добываю информацию. Подождите немного...")
  29. with open('channels.txt', 'r') as file:
  30. links = file.readlines()
  31. links = [link.rstrip() for link in links]
  32. for link in links:
  33. data = get_data(link)
  34. if data:
  35. logging.info(
  36. f"{data['title_channel']} | Самый новый пост: {data['last_post_date']}")
  37. else:
  38. logging.error(f'Не удалось получить данные по ссылке {link}')
  39. print(f"====\nВЫПОЛНЕНО. Результат смотрите в файле {logfile}")