Заготовка
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