Про цифровой след обычно говорят лишь в общих чертах, и описание программирования для работы с ним лишь упоминают. В данной статье рассмотрен набор библиотек Python и приемов, которые можно использовать для сбора и предобработки данных цифрового следа.
Понятие «Цифровой след»
Юридически понятие «цифровой след» не зафиксировано, в литературе он описывается как данные про конкретного человека, так и данные про организацию или событие. Однако чаще имеются в виду именно информация о людях.
Общие сведения: Проведение комплексного анализа цифрового следа человека (групп людей) и информационно?коммуникационных систем (далее — ИКС).
Таким образом, цифровой след представляет собой данные в интернете, относящиеся к конкретному объекту, которым чаще всего выступает человек. Важно иметь в виду законы о защите персональных данных и интеллектуальной собственности при работе с цифровым следом. В этой статье рассмотрен сбор данных из интернета со стороны закона.
Парсинг & сбор данных цифрового следа
Логичным способом собирать цифровой след программными инструментами является программирование подобной человеку логики работы с общедоступными данными. Люди ищут и собирают информацию про что-то конкретное через поиск, а далее, изучая страницы в интернете, выбирают информацию, где говорится про то, что их интересует.
Предобработка зависит от конкретной цели дальнейшей работы и типа собранных данных. Предобработка текста может включать в себя очистку от ненужных символов и токенизацию - разделение текста на слова/знаки/символы. Предобработка чисел - обработку пропусков и нормализацию. Предобработка изображения - простое форматирование.
Таким образом, основными этапами сбора и предобработки данных цифрового следа являются:
Отправка HTTP-запроса веб-серверу поисковика с упоминанием интересующего объекта;
Получение ссылки на страницу в интернете про интересующий объект из ответа веб-сервера, отправка HTTP-запроса для получения кода этой страницы;
Выбор из полученного кода страницы интересующей информации: либо вручную настроенный сбор данных из определенных сегментов страницы, либо проверка на упоминание объекта в тексте, и сбор таких предложений;
Предобработка данных цифрового следа:
Текст: очистка, токенизация;
Числа: обработка пропусков, нормализация;
Изображения: простое форматирование.
Для парсинга существует много библиотек Python. Очень простыми для начинающих являются «Requests» и «Beautiful Soup». Вот статья на эту тему. При работе с цифровым следом выполняются схожие действия, просто дополнительно нужно искать и выбирать информацию про один интересующий объект.
Отправку HTTP?запроса веб?серверу поисковика с упоминанием интересующего объекта можно выполнить с помощью библиотеки «Requests«. Нужно указать объект в запросе, в примере он указан в URL?адресе.
import requests url = 'https://www.google.com/search?q=object&sxsrf=APwXEdcTFNrK6vqIhKkA8ofiMVABpdXz3Q%3A1685681947166&ei=G3d5ZPDmCaqsrgSvxpLoBg&ved=0ahUKEwiw4KjN5qP_AhUqlosKHS-jBG0Q4dUDCA8&uact=5&oq=object&gs_lcp=Cgxnd3Mtd2l6LXNlcnAQAzINCAAQigUQsQMQgwEQQzINCAAQigUQsQMQgwEQQzINCAAQigUQsQMQgwEQQzIKCAAQigUQsQMQQzIICAAQgAQQsQMyCAgAEIAEELEDMg0IABCKBRCxAxCDARBDMg0IABCKBRCxAxCDARBDMgcIABCKBRBDMgsIABCKBRCxAxCDAToHCCMQigUQJzoECCMQJzoRCC4QgAQQsQMQgwEQxwEQ0QM6BQgAEIAEOgsIABCABBCxAxCDAToICC4QgAQQsQM6DgguEIAEELEDEMcBENEDOhIIABCKBRCxAxCDARBDEEYQ_wFKBAhBGABQAFjiC2DwDGgAcAF4AIAB2gOIAaALkgEJMC4xLjMuMC4xmAEAoAEBwAEB&sclient=gws-wiz-serp' r = requests.get(url) r.text
Получение ссылки на страницу в интернете про интересующий объект из ответа веб?сервера можно выполнить с помощью «Beautiful Soup» — сохранить атрибут «href» тега «a», который отправляет на новую страницу. Далее отправку HTTP?запроса для получения кода этой страницы можно сделать с помощью «Requests».
from bs4 import BeautifulSoup # Поиск всех полученных ссылок soup = BeautifulSoup(r.text, 'lxml') found_urls = soup.find_all('a') # Поиск ссылки на другой сайт for url in found_urls: href = url.get('href') #Ссылки на другие сайты в Google начинаются так if href.startswith("/url?q="): print(href[7:]) # пропуск /url?q= break r2 = requests.get(href[7:]) r2.text
Выбор из полученного кода страницы интересующей информации можно сделать либо вручную с помощью поиска сегмента «Beautiful Soup», либо можно проверить упоминание объекта в тексте через проверку в цикле и использование встроенной библиотеки «String».
def find_sentences_with_word(text, word): # Разбиваем текст на предложения предварительно # приведя все к нижнему регистру sentences = text.lower().split(". ") # Инициализируем список для хранения предложений с указанным словом sentences_with_word = [] # Проверяем каждое предложение for sentence in sentences: # Разбиваем предложение на слова sentence.lower() words = sentence.split() # Проверяем, содержит ли предложение указанное слово if word in words: sentences_with_word.append(sentence) return sentences_with_word # Пример текста, в котором будем искать предложения text = "Существует большое количество инструментов IT. " "Объект является одним из них, он требует особых навыков. " "Многие думают про объект и хотят им пользоваться для упрощения работы. " "Python - мощный язык программирования" # Слово, которое ищем в предложениях word = "объект" # Поиск предложений с указанным словом sentences_with_word = find_sentences_with_word(text, word) # Вывод найденных предложений for sentence in sentences_with_word: print(sentence)
API & Сбор данных цифрового следа
Сбор цифрового следа возможен также при программном взаимодействии с другими сервисами через их API. Так, предоставляется возможность получать данные из различных онлайн-платформ другим способом.
Сбор данных из Google с помощью Google Search API: Google Search API позволяет выполнять поисковые запросы и получать результаты в структурированном формате. Для использования API понадобится ключ, который можно получить через Google Cloud Console. Вот документация, где описано как можно получить ключ-API от Google.
from googleapiclient.discovery import build # Ключ API для Google Search API api_key = "YOUR_API_KEY" # Создание объекта для взаимодействия с API service = build("customsearch", "v1", developerKey=api_key) # Выполнение поискового запроса result = service.cse().list(q="python", cx="YOUR_CX").execute() # Обработка результатов if "items" in result: for item in result["items"]: title = item.get("title", "") link = item.get("link", "") print(title) print(link) print("-----------")
Сбор данных из YouTube с помощью YouTube Data API.
from googleapiclient.discovery import build # Ключ API для YouTube Data API api_key = "YOUR_API_KEY" # Создание объекта для взаимодействия с API youtube = build("youtube", "v3", developerKey=api_key) # Выполнение запроса на поиск видео по ключевому слову request = youtube.search().list(q="python tutorial", part="snippet", maxResults=10) response = request.execute() # Обработка результатов if "items" in response: for item in response["items"]: video_title = item["snippet"]["title"] video_id = item["id"]["videoId"] print(video_title) print(f"https://www.youtube.com/watch?v={video_id}") print("-----------")
Предобработка данных цифрового следа
Предобработка данных цифрового следа не особо отличается от предобработки других данных. В данной статье рассмотрены очень простые примеры, вот статья для более углубленного изучения. В зависимости от типа данных, к ним могут быть применены разные методы.
Текст: для простой очистки можно использовать встроенную библиотеку «String», для токенизации (разбиения текста на единицы) удобно использовать «NLTK».
from nltk.tokenize import word_tokenize import string text = "This is a sample sentence for text preprocessing." clean_text = text.lower() # Приведение текста к нижнему регистру clean_text = clean_text.translate(str.maketrans("", "", string.punctuation)) # Удаление знаков пунктуации tokens = word_tokenize(clean_text) # Токенизация текста print(tokens)
Числа: для обработки пропусков можно использовать «NumPy» — удалять пропущенные значения или заменять их на среднее или медианное, для нормализации можно использовать «Scikit?learn», «Pandas».
import numpy as np import pandas as pd # Пример данных с пропущенными значениями data = [1, 2, np.nan, 4, 5] # Удаление пропущенных значений clean_data = data.dropna() # Замена пропущенных значений средним значением mean_value = data.mean() data_filled = data.fillna(mean_value) # Нормализация данных normalized_data = (data - np.mean(data)) / np.std(data) print("Удаление пропущенных значений:", clean_data) print("Замена пропущенных значений:", data_filled) print("Нормализация данных:", normalized_data)
Изображения: можно выполнять простое форматирование с помощью библиотеки «Pillow».
from PIL import Image image_path = "image.jpg" # Открытие изображения image = Image.open(image_path) # Изменение размера изображения resized_image = image.resize((500, 500)) # Конвертация изображения в оттенки серого gray_image = image.convert("L") # Сохранение предобработанного изображения resized_image.save("resized_image.jpg") gray_image.save("gray_image.jpg")