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

Понятие «Цифровой след»

Юридически понятие «цифровой след» не зафиксировано, в литературе он описывается как данные про конкретного человека, так и данные про организацию или событие. Однако чаще имеются в виду именно информация о людях.

В 2022 году в России был принят профессиональный стандарт специалиста по моделированию, сбору и анализу данных цифрового следа ‑ Профстандарт 06.046 | Специалист по моделированию, цифрового следа | Профессиональные стандарты 2023. В этом документе также говорится про данные о человеке:

Общие сведения: Проведение комплексного анализа цифрового следа человека (групп людей) и информационно‑коммуникационных систем (далее — ИКС).

Таким образом, цифровой след представляет собой данные в интернете, относящиеся к конкретному объекту, которым чаще всего выступает человек. Важно иметь в виду законы о защите персональных данных и интеллектуальной собственности при работе с цифровым следом. В этой статье рассмотрен сбор данных из интернета со стороны закона.

Парсинг & сбор данных цифрового следа

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

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

Таким образом, основными этапами сбора и предобработки данных цифрового следа являются:

  1. Отправка HTTP-запроса веб-серверу поисковика с упоминанием интересующего объекта;

    URL-адрес при выполнении поиска
    URL-адрес при выполнении поиска
  2. Получение ссылки на страницу в интернете про интересующий объект из ответа веб-сервера, отправка HTTP-запроса для получения кода этой страницы;

  3. Выбор из полученного кода страницы интересующей информации: либо вручную настроенный сбор данных из определенных сегментов страницы, либо проверка на упоминание объекта в тексте, и сбор таких предложений;

  4. Предобработка данных цифрового следа:

  • Текст: очистка, токенизация;

  • Числа: обработка пропусков, нормализация;

  • Изображения: простое форматирование.

Для парсинга существует много библиотек Python. Очень простыми для начинающих являются «Requests» и «Beautiful Soup». Вот статья на эту тему. При работе с цифровым следом выполняются схожие действия, просто дополнительно нужно искать и выбирать информацию про один интересующий объект.

  1. Отправку 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

  2. Получение ссылки на страницу в интернете про интересующий объект из ответа веб‑сервера можно выполнить с помощью «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
  3. Выбор из полученного кода страницы интересующей информации можно сделать либо вручную с помощью поиска сегмента «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")

Комментарии (4)


  1. Zhbert
    03.06.2023 05:07
    +1

    Я-то думал. А тут три слова про обычный парсинг html, но в пафосном контексте.

    Идея для следующей статьи: selenium. Некоторые сайты, где контент генерируется через JS прямо в браузере, не поддадутся BS, например, и «цифровой след» останется неполным! //это я скорее в качестве троллинга

    P.S. Ещё и блоки кода картинками! :)


    1. Angelina_Kurgak Автор
      03.06.2023 05:07

      Спасибо за отзыв! Постаралась учесть комментарий.


  1. Xokare228
    03.06.2023 05:07
    +1

    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)

    Скорее всего любезно отдаст вам код 403 (потому что стандартный user-agent python requests блокируется гуглом). А даже если и не отдаст попросит пройти рекапчу


    1. Angelina_Kurgak Автор
      03.06.2023 05:07

      Спасибо за отзыв! При выполнении кода ошибок не возникло, и далее ссылка на другой сайт была получена, но, действительно, часто требуется изменять заголовки или сделать что-то еще.

      Отправка HTTP-запроса Google
      Отправка HTTP-запроса Google
      Получение ссылки на другую страницу
      Получение ссылки на другую страницу