Заготовка
commit
1845cde8d2
|
|
@ -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)
|
||||
|
||||
|
|
@ -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
|
||||
Loading…
Reference in New Issue