import requests
from bs4 import BeautifulSoup
from datetime import datetime
import time
import json
headers = {
# Paste User-Agent
}
url = "https://www.irk.ru/news/"
r = requests.get(url=url, headers=headers)
soup = BeautifulSoup(r.text, "lxml")
articles_cards = soup.find_all("li", class_="b-news-article-list-item")
# Функция получения новостей в первый раз
# Новости с сайта irk.ru
def get_first_news_irk():
# Словарь для новостей с сайта irk.ru
irk_news_dict = {}
# Хочу ID присваивать с 0, что у каждой новости был понятный ID
ids = 0
for article in articles_cards:
# Получаем заголовки новостей
article_title = article.find("a").text.strip()
# Получаем описание новостей
article_desc = article.find("p").text.strip()
# Получаем url новостей
article_url = f'https://www.irk.ru{article.find("a").get("href")}'
# Получаем время новостей
article_date_time = article.find("time").get("datetime")
# Преобразовываем время
date_from_iso = datetime.fromisoformat(article_date_time)
date_time = datetime.strftime(date_from_iso, "%Y-%m-%d %H:%M:%S")
article_date_timestamp = time.mktime(datetime.strptime(date_time, "%Y-%m-%d %H:%M:%S").timetuple())
# Делаем ID из даты новости
# article_id = "".join(
# [article_date_time[i] for i in range(len(article_date_time)) if article_date_time[i] in '0123456789']
# )
# На каждой итерации заполняем словарь новостей
# irk_news_dict[article_id] = {
# "article_date_timestamp": article_date_timestamp,
# "article_title": article_title,
# "article_url": article_url,
# "article_desc": article_desc
# }
irk_news_dict[ids] = {
"article_date_timestamp": article_date_timestamp,
"article_title": article_title,
"article_url": article_url,
"article_desc": article_desc
}
ids += 1
# Записываем результат в json файл
with open("src/test_dict.json", "w") as file:
json.dump(irk_news_dict, file, indent=4, ensure_ascii=False)
# Функция для проверки на появление новых новостей
def check_irk_news_update():
with open("src/test_dict.json") as file:
irk_news_dict = json.load(file)
# Словарь для заполнения свежими новостями
irk_fresh_news_dict = {}
for k, v in irk_news_dict.items():
ids = k
for article in articles_cards:
article_date_time = article.find("time").get("datetime")
# Делаем ID из даты новости
# Глупое решение, пока не придумал чем заменить
# article_id = "".join(
# [article_date_time[i] for i in range(len(article_date_time)) if article_date_time[i] in '0123456789']
# )
# Если id уже есть в подгружаемом словаре, то пропускаем
# Иначе добавляем новую новость в новый словарь со свежими новостями
# И записываем свежие новости в JSON файл
if ids in irk_news_dict:
continue
else:
article_url = f'https://www.irk.ru{article.find("a").get("href")}'
article_title = article.find("a").text.strip()
article_desc = article.find("p").text.strip()
article_date_time = article.find("time").get("datetime")
date_from_iso = datetime.fromisoformat(article_date_time)
date_time = datetime.strftime(date_from_iso, "%Y-%m-%d %H:%M:%S")
article_date_timestamp = time.mktime(datetime.strptime(date_time, "%Y-%m-%d %H:%M:%S").timetuple())
irk_news_dict[ids] = {
"article_date_timestamp": article_date_timestamp,
"article_title": article_title,
"article_url": article_url,
"article_desc": article_desc
}
irk_fresh_news_dict[ids] = {
"article_date_timestamp": article_date_timestamp,
"article_title": article_title,
"article_url": article_url,
"article_desc": article_desc
}
ids += 1
# Записываем результат в json файл
with open("src/test_dict.json", "w") as file:
json.dump(irk_news_dict, file, indent=4, ensure_ascii=False)
# Функция возвращает словарь со свежими новостями
return irk_fresh_news_dict
def main():
# 1я функция вызывается единожды для получения новостей
# get_first_news_irk()
# 2я функция проверяет обновления на сайте
# Если новости нет в json то добавляет в словарь и выводит на печать
print(check_irk_news_update())
if __name__ == '__main__':
main()