From e6e7ebe66c427da2656b948628b9a162f5b830a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9B=D0=B5=D0=B2?= Date: Wed, 23 Jul 2025 16:11:27 +0500 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=87=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=81=D1=8F,=20=D0=BD=D0=BE=20=D1=82=D1=80?= =?UTF-8?q?=D0=B5=D0=B1=D1=83=D0=B5=D1=82=20=D1=80=D0=B5=D1=84=D0=B0=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cor_func.py | 138 +++++++++++++++++++++++++++++++++++++++++++++++++ report fns.txt | 50 ------------------ 2 files changed, 138 insertions(+), 50 deletions(-) create mode 100644 cor_func.py delete mode 100644 report fns.txt diff --git a/cor_func.py b/cor_func.py new file mode 100644 index 0000000..72d9bf6 --- /dev/null +++ b/cor_func.py @@ -0,0 +1,138 @@ +import requests +from bs4 import BeautifulSoup +from pprint import pprint +import re + + +def parse_html(url=str): + """ + Фунция принимает строку URL, + выполняет запрос, + создает и возращает объект BeautifulSoup(HTML). + """ + # Запрос страницы + response = requests.get(url) + # Проверка статуса страницы + if not(200 <= response.status_code <= 299): + print("Ошибка при запросе:", response.status_code) + return response.status_code + # Создание обьекта BeautifulSoup + soup = BeautifulSoup(response.text, 'html.parser') + return soup + +def parse_date_report(url=str): + """ + Функия ожидает list из URL ввида: + url = https://formats.saby.ru/report/fns/128513 + Заходит по URL, запоминает дату. + Возвращает две строки ввида: + 'date = 01.07.22' + 'id_date = 5.01' + """ + soup = parse_html(url) + # Поиск в HTML строки ввида: 'Действующий формат (с 10.01.23) 5.01' + div_element = soup.find('div', class_='controls-Dropdown__text') + # Извлекаем текст из элемента + text = div_element.get_text() + print(text, ' ',url) + #Парсим нужные данные + date = '' + id_date = '' + if ('_') in text: + regex = r'\w+\s\w+\s(\S+) (\S+)' + date, id_date = re.search(regex, text).groups() + else: + regex = r'(\d{2}\D\d{2}\D\d{2})(?:(?:.+)?\))? #?(\d+(?:\D\d+)?)' + date, id_date = re.search(regex, text).groups() + print('date: ', date, 'id: ', id_date) + return date, id_date + +def parse_reports(soup=BeautifulSoup, + report_title = str, + url_formats = str, + name_title = str): + """ + Достаются все необходимые данные, возвращаются в ввиде словаря: + {106538: ('fns', 'НД по косвенным налогам', '01.08.23', '5.04')} + """ + # Содрежит url всех report(не используется) + #list_report_url = [] + result_dict_data = {} + # Перебарает все URL, ищутся по тегу 'a' + for link in soup.find_all('a'): + # Ищет по тегу: href + href = link.get('href') + if f'{report_title}/' in href: + # id записи + id = href.rstrip('/').split('/')[-1] + #URL записи + url_report = f'{url_formats}{href}' + #Добавление url в лист(не используется) + #list_report_url.append(url_title) + link = soup.find('a', href=href) + # Имя записи + span = link.find('span', class_="ProxySbisRu__registry-BrowserItem_typeName") + # Передаем текущию запись цикла + date, id_date = parse_date_report(url_report) + # Добавление всех данных в итоговый словарь + result_dict_data.update({id: (name_title, span.text, date, id_date)}) + + return result_dict_data + +def write_report_data(filename, dict_name = dict, name_title = str): + """ + Сохраняем запись, каждая запись с новой строки: + 'ключ: значение' + 'ключ: значение' + """ + dash = '-'*30 + with open(filename, 'a', encoding='utf-8') as f: + f.write(f'\n{dash}START_{name_title}{dash}\n') + for key, value in dict_name.items(): + str_k_v = f'{key}: {value}\n' + f.write(str_k_v) + f.write(f'{dash}END_{name_title}{dash}\n') + +def serth_title(): + """ + Функция ищет все тайтлы, + возвращает лист сотоящий из: + ['/report/fns', ...] + """ + url_format_report = 'https://formats.saby.ru/report' + html = parse_html(url_format_report) + list_reports = [] + # Перебераем все URL + for link in html.find_all('a'): + # Ищет по тегу: href + href = link.get('href') + if re.search(r'\/report\/(\w+)$', href): + print('Cовпадение найдено: ', href) + list_reports.append(href) + return list_reports + +# Имя файла в который будет записан результат кода +filename_save = 'ReportData.txt' +#Удаляем старые записи, что бы довабить новые +with open(filename_save, 'w') as f: + #Файл перезаписывается в пустой + f.write('') +# Лист имеет вид: ['/report/fns', '/report/sfr'...] +list_title = serth_title() + +URL_FORMATS = 'https://formats.saby.ru' + +for report_title in list_title: + name_title = report_title.rstrip('/').split('/')[-1] + + url_title = f'{URL_FORMATS}{report_title}' + # Объект HTML + soup = parse_html(url_title) + # Словарь с нужными данными + dict_result = parse_reports(soup, report_title, URL_FORMATS, name_title) + # Запись данных в текстовый файл + write_report_data(filename_save, dict_result, name_title) + + + + diff --git a/report fns.txt b/report fns.txt deleted file mode 100644 index b600ae6..0000000 --- a/report fns.txt +++ /dev/null @@ -1,50 +0,0 @@ -128513: ('fns', 'Уведомление о налогах для ЕНП', '01.07.22', '5.03') -130840: ('fns', 'Персонифицированные сведения', '01.01.23', '5.01') -120166: ('fns', 'Расчет по страховым взносам', '01.01.25', '5.07') -120180: ('fns', '6-НДФЛ (со справками 2-НДФЛ)', '01.01.24', '5.05') -120092: ('fns', 'НД по НДС', '01.01.25', '5.11') -50271: ('fns', 'Письмо в налоговую', '09.01.23', '5.04') -120117: ('fns', 'НД по прибыли', '01.01.25', '5.12') -141442: ('fns', 'Cообщение о фактах заключения договоров НПФ', '01.01.25', '5.02') -121867: ('fns', 'НД по УСН', '01.01.25', '5.08') -118785: ('fns', 'Упрощенная бухгалтерская (финансовая) отчетность', '01.01.19', '5.03') -120344: ('fns', '26.5-1 Заявление на получение патента', '15.12.20', '5.09') -121160: ('fns', 'Уведомление об уменьшении патента на сумму страховых взносов', '12.07.21', '5.02') -118611: ('fns', 'Бухгалтерская (финансовая) отчетность', '01.01.19', '5.08') -99720: ('fns', 'Согласие (отказ) на раскрытие налоговой тайны', '13.12.22', '5.03') -119230: ('fns', 'Заявление к косвенным налогам', '01.01.15', '5.08') -121163: ('fns', 'НД по налогу на имущество организаций', '01.01.25', '5.12') -126058: ('fns', 'Электронная доверенность ФНС', '19.12.24', '5.03') -116682: ('fns', 'Зачет сумм ЕНС', '10.01.23', '5.04') -117433: ('fns', 'Сведения по дебиторской и кредиторской задолженности учреждения', '01.01.18', '5.05') -120421: ('fns', '3-НДФЛ', '01.01.25', '5.19') -99219: ('fns', 'Отчет об исполнении учреждением плана ФХД', '01.01.16', '5.05') -120181: ('fns', 'Р13014 Изменение сведений ЮЛ', '02.01.00', '5.02') -99213: ('fns', 'Сведения об остатках денежных средств учреждения', '01.01.16', '5.04') -119699: ('fns', 'Расчет о суммах доходов, выплаченных иностранным организациям', '01.01.24', '5.03') -122284: ('fns', 'Представление документов (сведений)', '16.01.18', '5.02') -106538: ('fns', 'НД по косвенным налогам', '01.08.23', '5.04') -76642: ('fns', 'НД по водному налогу', '01.01.16', '5.01') -133796: ('fns', 'Уведомление о невозможности представления', '19.08.19', '5.02') -32042: ('fns', 'Единая (упрощенная) налоговая декларация', '01.10.13', '4.02') -120165: ('fns', 'Р24001 Изменение сведений ИП', '18.02.24', '5.03') -77900: ('fns', 'Заявление о праве на уменьшение НДФЛ на фиксированные платежи', '13.11.15', '5.01') -118112: ('fns', 'Возврат сумм ЕНС', '10.01.23', '5.02') -120627: ('fns', 'С-09-3-1 Сообщение о создании обособленного подразделения', '16.12.23', '5.05') -121754: ('fns', 'НД по ЕСХН', '01.01.21', '5.05') -121952: ('fns', 'НД по НДПИ', '01.01.25', '5.10') -120348: ('fns', '26.2-1 Уведомление о переходе на УСН', '02.11.12', '5.02') -126016: ('fns', 'Уведомление об освобождении от уплаты НДС', '01.01.25', '5.02') -117431: ('fns', 'Баланс государственного (муниципального) учреждения', '01.01.18', '5.06') -71563: ('fns', 'Перечень заявлений о ввозе товаров и уплате косвенных налогов', '01.01.15', '5.01') -117432: ('fns', 'Отчет о финансовых результатах деятельности учреждения', '01.01.18', '5.06') -120287: ('fns', 'Реестр документов, подтверждающих льготы по НДС', '02.12.20', '5.02') -120172: ('fns', 'Р26001 Прекращение деятельности ИП', '18.02.24', '5.03') -131129: ('fns', 'Возврат госпошлины', '10.01.23', '5.01') -120619: ('fns', 'С-09-3-2 Сообщение о закрытии обособленного подразделения', '31.08.11', '5.02') -120968: ('fns', '26.5-4 Заявление о прекращении деятельности по ПСН', '01.01.13', '5.02') -117430: ('fns', 'Баланс исполнения бюджета главного распорядителя', '01.01.18', '5.05') -106013: ('fns', 'Сведения о разрешениях на добычу водных биоресурсов', '26.02.24', '5.04') -7676: ('fns', '26.2-6 Уведомление об изменении объекта по УСН', '13.04.10', '5.02') -117553: ('fns', 'НД по акцизам на спирт', '01.01.25', '5.05') -46181: ('fns', 'Расчет регулярных платежей за пользование недрами', '01.01.22', '3.00004')