Заготовка

main
Лев 2025-07-22 10:05:27 +05:00
commit 1845cde8d2
2 changed files with 167 additions and 0 deletions

117
main.py 100644
View File

@ -0,0 +1,117 @@
import requests
from bs4 import BeautifulSoup
from pprint import pprint
import os
URL_FNS = "https://formats.saby.ru/report/fns"
URL_FORMATS = 'https://formats.saby.ru'
response = requests.get(URL_FNS)
filename_report_fns = 'report fns.txt'
if 200 <= response.status_code <= 299:
pass
else:
print("Ошибка при запросе:", response.status_code)
# Парсинг HTML
soup = BeautifulSoup(response.text, 'html.parser')
# Содрежит url всех записей
list_report_fns = []
# Содержит URL и имя всех записей
list_for_user = []
# Цикл в котором добавляем в лист url ввида:
# https://formats.saby.ru/report/fns/116682
for link in soup.find_all('a'):
href = link.get('href')
pprint(href)
if '/report/fns/' in href:
list_report_fns.append(f'{URL_FORMATS}{href}')
link = soup.find('a', href=href)
span = link.find('span', class_="ProxySbisRu__registry-BrowserItem_typeName")
list_for_user.append(f'{URL_FORMATS}{href} {span.text}')
def write_report_fns(filename, dict_name = dict):
"""
Сохраняем запись:
https://formats.saby.ru/report/fns/106013 Действующий формат (с 26.02.24) 5.04
"""
with open(filename, 'w', encoding='utf-8') as f:
for key, value in dict_name.items():
str_k_v = f'{key}: {value}\n'
f.write(str_k_v)
def date_report_fns(list_fns = list):
"""
Функия ожидает list из URL
Заходит на каждый URL, запоминает дату.
Возвращает словарь ввида:
{'https://formats.saby.ru//report/fns/99219': 'Действующий формат (с 01.01.16) 5.05', ...}
"""
# Итоговый словарь
dict_result = {}
# Перебераем URL из аргумента функции
for url_fns in list_fns:
# Запрос страницы:
response_fns = requests.get(url_fns)
print(response_fns.status_code)
# Парсинг в HTML
soup_fns = BeautifulSoup(response_fns.text, 'html.parser')
# Поиск в HTML строки ввида: Действующий формат (с 10.01.23) 5.01
div_element = soup_fns.find('div', class_='controls-Dropdown__text')
# Извлекаем текст из элемента
text = div_element.get_text()
# Создаем словарь из URL и строки содрежащий актуальность записи
dict_appen = {url_fns: text}
# Добавляем в итоговый словарь
dict_result.update(dict_appen)
return dict_result
def actual_report_fns(dict_open, dict_new):
"""
Функция принимает два словаря:
- dict_open из файла.
- dict_new из HTML
Ищет изменения в словарях
Возвращает один актуальный словарь.
"""
dict_result = {}
# Ключи, которые есть в dict_open, но нет в dict_new
missing_in_new_dict_fns = {k: dict_open[k] for k in dict_open if k not in dict_new}
# Ключи, которые есть в new_dict_fns, но нет в dict_open
missing_in_dict_open_report_fns = {k: dict_new[k] for k in dict_new if k not in dict_open}
# Ключи с разными значениями
# value_diff = {k: (dict_open[k], dict_new[k]) for k in dict_open if k in dict_new and dict_open[k] != dict_new[k]}
value_diff = {k: dict_open[k] for k in dict_open if k in dict_new and dict_open[k] != dict_new[k]}
print('Запись не существует', missing_in_dict_open_report_fns)
print('Новые записи: ', missing_in_new_dict_fns)
print('Изменение записи', value_diff)
#Словарь с записями котоыре нужно удалить
dict_del = {}
dict_del.update(missing_in_dict_open_report_fns)
dict_del.update(value_diff)
# Удаляем из словря(который записан в файле) данные, записи которых больше не существует:
dict_result = {k: v for k, v in dict_open.items() if k not in dict_del}
# Добаляем новые записи
dict_result.update(missing_in_new_dict_fns)
dict_result.update(value_diff)
write_report_fns(filename_report_fns, dict_result)
new_dict_fns = date_report_fns(list_report_fns)
# Проверка есть ли файл
if os.path.exists(filename_report_fns):
dict_open_report_fns = {}
with open(filename_report_fns, 'r', encoding='utf-8') as f:
for line in f:
line = line.strip().split(': ')
dict_line = {line[0]:line[1]}
dict_open_report_fns.update(dict_line)
if dict_open_report_fns == new_dict_fns:
print('равны')
else:
print('не равны')
actual_report_fns(dict_open_report_fns, new_dict_fns)
else:
write_report_fns(filename_report_fns, new_dict_fns)

50
report fns.txt 100644
View File

@ -0,0 +1,50 @@
https://formats.saby.ru/report/fns/128513: Действующий формат (с 01.07.22) 5.03
https://formats.saby.ru/report/fns/130840: Действующий формат (с 01.01.23) 5.01
https://formats.saby.ru/report/fns/120166: Действующий формат (с 01.01.25) 5.07
https://formats.saby.ru/report/fns/120180: Действующий формат (с 01.01.24) 5.05
https://formats.saby.ru/report/fns/120092: Действующий формат (с 01.01.25) 5.11
https://formats.saby.ru/report/fns/50271: Действующий формат (с 09.01.23) 5.04
https://formats.saby.ru/report/fns/120117: Действующий формат (с 01.01.25) 5.12
https://formats.saby.ru/report/fns/141442: Действующий формат (с 01.01.25) 5.02
https://formats.saby.ru/report/fns/121867: Действующий формат (с 01.01.25) 5.08
https://formats.saby.ru/report/fns/118785: Действующий формат (с 01.01.19) 5.03
https://formats.saby.ru/report/fns/120344: Действующий формат (с 15.12.20) 5.09
https://formats.saby.ru/report/fns/121160: Действующий формат (с 12.07.21) 5.02
https://formats.saby.ru/report/fns/118611: Действующий формат (с 01.01.19) 5.08
https://formats.saby.ru/report/fns/99720: Действующий формат (с 13.12.22) 5.03
https://formats.saby.ru/report/fns/119230: Действующий формат (с 01.01.15) 5.08
https://formats.saby.ru/report/fns/121163: Действующий формат (с 01.01.25) 5.12
https://formats.saby.ru/report/fns/126058: Действующий формат (с 19.12.24) 5.03
https://formats.saby.ru/report/fns/116682: Действующий формат (с 10.01.23) 5.04
https://formats.saby.ru/report/fns/117433: Действующий формат (с 01.01.18) 5.05
https://formats.saby.ru/report/fns/120421: Действующий формат (с 01.01.25) 5.19
https://formats.saby.ru/report/fns/99219: Действующий формат (с 01.01.16) 5.05
https://formats.saby.ru/report/fns/120181: Действующий формат (с 02.01.00) 5.02
https://formats.saby.ru/report/fns/99213: Действующий формат (с 01.01.16) 5.04
https://formats.saby.ru/report/fns/119699: Действующий формат (с 01.01.24) 5.03
https://formats.saby.ru/report/fns/122284: Действующий формат (с 16.01.18) 5.02
https://formats.saby.ru/report/fns/106538: Действующий формат (с 01.08.23) 5.04
https://formats.saby.ru/report/fns/76642: Действующий формат (с 01.01.16) 5.01
https://formats.saby.ru/report/fns/133796: Действующий формат (с 19.08.19) 5.02
https://formats.saby.ru/report/fns/32042: Действующий формат (с 01.10.13) 4.02
https://formats.saby.ru/report/fns/120165: Действующий формат (с 18.02.24) 5.03
https://formats.saby.ru/report/fns/77900: Действующий формат (с 13.11.15) 5.01
https://formats.saby.ru/report/fns/118112: Действующий формат (с 10.01.23) 5.02
https://formats.saby.ru/report/fns/120627: Действующий формат (с 16.12.23) 5.05
https://formats.saby.ru/report/fns/121754: Действующий формат (с 01.01.21) 5.05
https://formats.saby.ru/report/fns/121952: Действующий формат (с 01.01.25) 5.10
https://formats.saby.ru/report/fns/120348: Действующий формат (с 02.11.12) 5.02
https://formats.saby.ru/report/fns/126016: Действующий формат (с 01.01.25) 5.02
https://formats.saby.ru/report/fns/117431: Действующий формат (с 01.01.18) 5.06
https://formats.saby.ru/report/fns/71563: Действующий формат (с 01.01.15) 5.01
https://formats.saby.ru/report/fns/117432: Действующий формат (с 01.01.18) 5.06
https://formats.saby.ru/report/fns/120287: Действующий формат (с 02.12.20) 5.02
https://formats.saby.ru/report/fns/120172: Действующий формат (с 18.02.24) 5.03
https://formats.saby.ru/report/fns/131129: Действующий формат (с 10.01.23) 5.01
https://formats.saby.ru/report/fns/120619: Действующий формат (с 31.08.11) 5.02
https://formats.saby.ru/report/fns/120968: Действующий формат (с 01.01.13) 5.02
https://formats.saby.ru/report/fns/117430: Действующий формат (с 01.01.18) 5.05
https://formats.saby.ru/report/fns/106013: Действующий формат (с 26.02.24) 5.04
https://formats.saby.ru/report/fns/7676: Действующий формат (с 13.04.10) 5.02
https://formats.saby.ru/report/fns/117553: Действующий формат (с 01.01.25) 5.05
https://formats.saby.ru/report/fns/46181: Действующий формат (с 01.01.22) 3.00004