Python Безопасность Парсинг

Python в ИБ. Часть 8. Парсинг и обработка данных

Python в ИБ. Часть 8. Парсинг и обработка данных

Сегодня речь пройдёт про парсинг и обработку данных. Практически любой программист или хакер сталкивается с этой проблемой и так или иначе решает её. Отдельно хочется отметить, что люди разрабатывающие парсеры обычно без денег не бывают. Конечно, там уровень гораздо выше, но общий смысл тот-же.

Мы не будем касаться специальных библиотек и фреймворков, просто рассмотрим основы обработки текста.

Теория.

Парсинг – обработка данных (зачастую текстовых) с цель получения необходимой информации и представление её в удобоваримом виде. Данное определение довольно ёмко описывает парсинг, но вы можете найти и другие.

Зачастую, когда говорят про парсинг, чаще всего упоминают сайты и парсинг сайтов. Это достаточно широкая тема. Парсинг сайтов – очень полезен во многих бизнес-сферах и других задачах. Получение необходимой информации с различных сайтов может строить целые сферы деятельности.

Но мы не будем углублять в парсинг сайтов, думаю, материалов по этой теме можно найти достаточно и самостоятельно их освоить. В данном уроке мы коснёмся совсем основ и распарсим небольшие примеры.

Ничего устанавливать из библиотек не потребуется, мы будем работать со стандартными модулями.

Начнём с простого примера.

Допустим у нас есть некоторый текстовый файл в котором на каждой строке есть запись вида “<Имя> <Фамилия> <Возраст>”. Это может быть список чего угодно. Сделаем небольшой такой файл.

Значений может быть больше, сейчас это не так важно.

Теперь представим следующую задачу: Нам нужно принимать данный список (например скачивать его с какой-нибудь общей файловой папки) и заносить в какую либо базу данных, однако напрямую это сделать нельзя, так как запрос нужно построить по особо типу, и руками сделать это практически невозможно (допустим файл будет содержать 10000+ строк). Для этого нам потребуется небольшой скрипт, который автоматизирует обработку и составит запрос. Для начала давайте прочтём файл и сохраним всё в один большой буфер.

Запустим и проверим работу скрипта.

Отлично, теперь давайте из общего буфера сделаем список, в котором каждый элемент будет является одной строчкой из файла. Это легко делается с помощью метода  split, который производит разбиение строки по указанному разделителя (в нашем случае разделителем является символ перевода строки).

Изменим только последнюю часть кода и посмотрим на результат его работы.

Отлично, теперь у нас есть список из строк. Теперь давайте создадим класс, который будет представлять собой отдельного пользователя, его можно будет расширить, когда у нас в базе данных появятся новые поля и прочее.

Класс в своём конструкторе принимает буфер, который разбивается по символу пробела. По сути конструктор принимает строку, которая отвечает за описание пользователя, эта строка разбивается и каждое из значений записывается в одно из свойств класса.

Создадим список из объектов данного класса. После вызовем метод show у каждого из них.

Посмотрим на результат работы.

Отлично, всё работает. Дальше можно сделать специальный метод, который формирует запрос в базу данных с данными текущего пользователя и прочее. Но это уже выходит за тему данного урока.

Перед тем как мы начнём рассмотрение следующего мощного инструмента для обработки текста, хотелось бы сказать про одну небольшую, но крайне полезную в ряде случае функцию (точнее метод). Это метод strip. Работает он таким образом.

Крайне удобная функцию для удаления символов перевода строки и лишних пробелов.

Теперь кратко рассмотрим достаточно мощный инструмент для поиска в тексте и обработки данных. Это регулярные выражения, наверняка, вы про них что-то слышали.

Регулярные выражения представляют собой некоторые шаблоны, описываемые по специальным правилам, которым может удовлетворять текст. Например, чтобы найти в тексте слова определённый длины можно использовать регулярные выражения, или чтобы найти слова содержащие определённые символы, тоже можно использовать регулярные выражения.

Регулярные выражения большая тема, по которой есть книжки и курсы, мы рассмотрим лишь небольшую часть.

Итак, представим, что у нас есть куча текста из которого нам нужно найти только небольшой фрагмент, при этом мы точно не знаем, какое значение у этого фрагмента, но знаем, что оно подчиняется некоторым правилам (допустим мы ищем число с плавающей точкой, которое может изменяться – это может быть что угодно, от температуры до стоимость услуги или товара).

Пусть у нас есть вот такой текстовый файл с кучей бессмысленных данных (не особо правдоподобно, но всё же) и нам надо найти в нём число с плавающей точкой, при этом мы знаем, что количество знаком перед запятой равно 3, а после запятой равно двум.

С помощью данного скрипта можно решить данную задачу.

Давайте разберём строчку 18, так как остальное не вызывает интереса. Для начала обратим внимание, на то что используется модуль re, это библиотека содержащая в себе функции, работающие с регулярными выражениями.

Функция findall находит все вхождения подчиняющиеся регулярному выражению, указанному в качестве первого аргумента, в тексте, который находится во втором аргументе.

Теперь разберём само регулярное выражение и разберёмся, почему оно так выглядит.

Теперь, когда мы всё разобрали, давайте запустим и посмотрим на результат работы.

Отлично, мы нашил число.

Регулярные выражения очень мощный инструмент, особенно при обработке большого объёма данных. Если вы сталкиваетесь с этой проблемой часто, рекомендуем изучить тему регулярных выражений подробнее.

Вот урок и подходит к концу, надеюсь вам было полезно узнать про базовые методы обработки данных. Отныне, если вам надо будет как-то преобразовать текст, вы можете пользоваться ими и автоматизировать этот непростой процесс.

Очень злой админ
Очень злой админ Автор статьи

Админ сайта. Публикует интересные статьи с других ресурсов, либо их переводы. Если есть настроение, бывает, что пишет и что-то своё.

Комментарии

  1. Как насчет потоковой обработки? Ведь файл может быть мега большим и нужно обеспечить обработку данных по порциям.

Leave a Reply

Your email address will not be published. Required fields are marked *