«Интеллект – это способность избегать выполнения работы, но так, чтобы она при этом была сделана.»
Линус Торвальдс
Рассуждения:
В настоящее время НСИ (Нормативно-справочная информация) используется во всех бизнес-процессах. В состав НСИ входят справочники и классификаторы. Одной из проблем НСИ является недостоверная информация, которая влечет за собой принятие неверных решений.
Например, некорректная информация в справочниках при закупке материалов может привести к таким последствиям, как:
-
Штрафы и санкции: использование товаров, не соответствующих стандартам, может привести к штрафам и санкциям со стороны контролирующих органов;
-
Финансовые потери: закупка товаров, не соответствующих требованиям, может привести к дополнительным расходам на их замену;
-
Риск для репутации: недостоверная информация может негативно сказываться на репутации компании.
Поэтому данные в справочнике требуют постоянной проверки и их корректировки. Объём информации, который требуется проверить, а тем более исправить вручную, может существенно замедлить процесс.
Приведу интересный кейс, выпавший на мою долю и его решение. Для проверки определенных типов данных я предлагаю парсинг сайтов, а автоматизация исправления уже на ваш вкус. Например, различные языки программирования. Лично я за весь свой опыт использовал: C#, Python, VBA для работы с Excel, в зависимости от ситуации.
Также поделюсь полезным файлом, который можно использовать в автоматизации проверки номенклатурных позиций.
Предыстория:
Мне предстояла нормализация справочников, при этом, по возможности, выделение таких ошибок, как:
-
опечатки;
-
лишние пробелы;
-
неактуальные НТД.
И если с первыми двумя справится легко, то просматривая небольшой справочник в 300 тыс. позиций, приблизительно 10-15% из низ будут содержать материалы по ГОСТам.
Просмотреть 40 тыс. позиций вручную, конечно, реально, но не стоит того.
Парсинг сайтов — это по сути автоматизированный сбор неструктурированной информации с веб-страницы и, что самое главное, преобразование её в структурированный вид. В общем и целом, безобидное и очень полезное дело.
Перейдем к технической части, т.е. к самому коду и его описанию:
-
Импорт библиотек
Для парсинга использовал:
-
bs4 для работы с HTML – документами;
-
request для выполнения HTTP запросов;
-
xlsxwriter для создания Excel файла;
-
-
Функция get_soup(url):
def get_soup(url): res = requests.get(url, headers) return bs4.BeautifulSoup(res.text, 'html.parser')
Эта вспомогательная функция принимает URL, отправляет GET-запрос и возвращает объект BeautifulSoup, который позволяет работать с HTML-кодом страницы.
-
Цикл для сбора данных:
Основная логика находится в цикле while, который проходится от 1-го до последнего стандарта. На каждой итерации происходит:
-
Запрашивается страница с конкретным ГОСТом;
-
Извлекаются строки и таблицы с информацией о ГОСТе, статусе и замене;
-
Результаты добавляются в список data, если данные были успешно извлечены, в противном случае может возникать ошибка выхода за пределы массива.
while i <= last_gost: gost_categories = get_soup(main_url + str(i)) rows = gost_categories.find_all('tr') try: gost = rows[2].find_all('td')[0].text.strip() status = rows[3].find_all('td')[0].text.strip() if rows[14].find_all('th')[0].text.strip() == 'Заменяющий:': replace_gost = rows[14].find_all('td')[0].text.strip() elif rows[15].find_all('th')[0].text.strip() == 'Заменяющий:': replace_gost = rows[15].find_all('td')[0].text.strip() else: replace_gost = '' data.append([gost, status, replace_gost]) except IndexError: gost = 'Ошибка: ' + str(i) status = '' replace_gost = '' data.append([gost, status, replace_gost]) i += 1
Результат:
На выходе получаем Excel файл, который можно использовать.
К примеру, возьмем один из справочников, в котором 39 тыс. номенклатурных позиций по ГОСТу, из которых 36 тысяч действующих, остальные 3 тыс. были заменены на другой ГОСТ или вовсе отменены.
Теперь проверка актуальности ГОСТов вне зависимости от размера справочника, занимает минут 5, а если пойти заварить кофе – 10.
Для сравнения данных лично я использовал 2-е формулы: одна для того, чтобы вытащить ГОСТ из позиции в справочнике, вторая обычный ВПР, который сравнивает данные с типом интервального просмотра «ИСТИНА».
Что скажите Вы? На самом деле, в зависимости от целей, даже эту информацию можно применить где угодно: от различных ERP систем до специализированных баз данных.
Данный файл актуален на конец 2024 года. Скачать его можно тут.
ссылка на оригинал статьи https://habr.com/ru/articles/860874/
Добавить комментарий