Статья Google Sheets в OSINT: Скрапинг данных

AlexV

В теневом с 2008 г.
Команда форума
Модератор
Private Club
Старожил
Migalki Club
Регистрация
18/1/18
Сообщения
3.195
Репутация
8.842
Реакции
6.841
RUB
0
Депозит
1 000 рублей
Сделок через гаранта
6
1727453611734.png
Поговорим об использовании электронных таблиц в работе OSINT-аналитиков. В нашего цикла статей мы обсуждали автоматизацию генерации (расширенных операторов поисковых запросов). Сегодня раскроем тему скрапинга: разберем основы, сделаем сервис для пробива судимостей и чтения RSS, а также интегрируем поисковые выдачи с сайтов в наши Таблицы.

Что такое скрапинг?​

68ef12db072e34d1451e82f263e528d0.png

Веб-скрейпинг (или скрепинг, или скрапинг от англ. web scraping) — это технология получения веб-данных путем извлечения их со страниц веб-ресурсов. Скрапинг широко применяется для отслеживания цен и товаров, конкурентной разведки, мониторинга новостей или контента, а также извлечения контактной или иной значимой информации.

Начнем издалека. Следующий скрипт позволит нам запросить статус той или иной страницы в сети:

Код:
function getPageStatus(url) {

  try {

    var response = UrlFetchApp.fetch(url, {

      'muteHttpExceptions': true

    });

    var statusCode = response.getResponseCode();

    return " " + statusCode + " " + (statusCode == 200 ? "FOUND" : "NOT FOUND");

  } catch (e) {

    return "Error: " + e.message;

  }

}
На выходе мы получим сведения о доступности страницы (код 200), о ее отсутствии (404), превышении сроков ожидания (429) или ошибках в записях DNS. Нам это пригодится для различных задач — от проверки никнеймов в социальных сетях до сканирования веб-ресурсов.

Теперь непосредственно к скрапингу. За его запуск в Google Sheets отвечает функция =IMPORTXML. Для начала давайте попробуем скопировать данные из описания Telegram-канала, расположенного по адресу .

Создаем новую таблицу... К слову, для этого можно просто ввести sheet.new в адресной строке браузера Chrome. В ячейку A2 помещаем адрес . Теперь ставим в ячейку B2 функцию:

Код:
=IMPORTXML(A2; "//title")
eff771b07f96bfe37dfb3a99996be932.png

Это позволит скопировать в таблицу заголовок веб-страницы.

Попробуем использовать другую функцию:

Код:
=IMPORTXML("https://web.archive.org/cdx/search/cdx?url=t.me/tomhunter"; "//body")
Она выгрузит в таблицу все содержимое веб-страницы. Обычно тут возникают проблемы, поскольку содержимое может оказаться раскиданным по нескольким ячейкам. Чтобы собрать всю информацию в одной ячейке, изменим функцию следующим образом:

Код:
=JOIN(CHAR(10); IMPORTXML(A2; "//html/body"))
fadfcbb02acdee4fac55fa347d027f3a.png

Почистим полученные данные. Для этого создадим следующую формулу:

Код:
=MID(B4;1;SEARCH(" var ";B4)-1)
1a346c938b7755dcd2c2716983a05417.png

С ее помощью мы удалим текст, содержащийся в ячейке, начиная с определенного символа или слова. В нашем случае, это ‭«var», с которого начинается техническая информация веб-страницы.

Теперь вытащим из полученных данных контакты, которые указаны в описании канала. Для этого мы используем формулу =REGEXEXTRACT, а также регулярные выражения. Регулярное выражение — это шаблон, который обработчик регулярных выражений пытается сопоставить с введенным текстом. Так, например, регулярное выражение, по которому программа распознает в тексте адрес электронной почты, будет следующим:

Код:
[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}
А формула, которую мы вставим в ячейку:

Код:
=REGEXEXTRACT(B4; "[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}")
f91234ffb838463dc1bbbbe735274eb8.png

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

Скрапинг по судам и физлицам​

475417924512f59ce03248acb744980a.png

Теперь давайте попробуем применить описанное выше на примере канала в Telegram для обмена данными с сайтом судебных решений:
Это позволит нам загружать в таблицу сведения об уголовных, административных и гражданских делах физлица. Вспомним и сгенерируем готовую гиперссылку, которая будет содержать страницу поиска и запрос типа ‭«Фамилия И.О.». Проиллюстрирую на примере уже известного нам Бабеля Михаила Александровича, находящегося в федеральном розыске.
Теперь сформируем для этой веб-страницы формулу:

Код:
=JOIN(CHAR(10); IMPORTXML(A2; "//html/body"))
ab5fca33b2e0dedec203ebce50c1186e.png

Получилась куча неструктурированных данных. Чтобы разделить ее, воспользуемся формулой =SPLIT. Например:

Код:
=SPLIT(A3; "~")
e628c6c3c3eaed54a6c0a8f35f9b83a3.png

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

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

Код:
=MID(D3;1;SEARCH(" от ";D3)-1)
365896942add1a5fb8fa7eaf6598c139.png

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

Скрапинг по коду сайта​

5de52ac6a150476aca4e78f79aba7dca.png

Перейдем к более сложным формам скрапинга. Итак, у нас есть поисковая выдача со страницы М.А. Зайдем на эту страницу, кликнем правой кнопкой мыши и выберем функцию ‭«Просмотреть код». В правой части экрана откроется код веб-страницы. Нажимаем ‭«Элементы» — ‭«Выбрать элементы на странице для проверки». Далее кликаем на элемент, который выводит все результаты найденных судебных решений. Копируем адрес нужного элемента в формате Xpath. Должно получиться что-то похожее:

Код:
/html/body/div[1]/div[6]/div/div[2]/div[3]/ul
c5ae409302cfa3fe8a0f73f0b129bb8a.png

Теперь пишем новую формулу:

Код:
=IMPORTXML(A1; "/html/body/div[1]/div[6]/div/div[2]/div[3]/ul")
e465b21f8ad97ec6c24f5736605c1058.png

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

Код:
=IMPORTXML(A1; "//html/body/div[2]/div[2]/div/div[4]")
a80bd9bef6c134c51ed84e41d53bc8b8.png

Использование формулы позволило выгрузить построчно описание канала в нашу таблицу. Теперь распространим формулу для исследования группы каналов. Для этого можно ее растянуть в таблице.

ab9b3c1e25a41cc26e5bbe5086d7d463.png

Хочу также отметить, что в нашу таблицу мы можем импортировать и RSS-фиды. За это отвечает функция =IMPORTFEED. Допустим, что мы сгенерировали RSS-поток при помощи Google Alerts. Вывести его в таблицу можно при помощи следующей формулы:

Код:
=IMPORTFEED ("https://www.google.be/alerts/feeds/16150513236241462639/7461767585858944553")
5cc9f849b11c353220539fadf278c523.png

Или при помощи такой:

Код:
=IMPORTFEED ("https://www.google.be/alerts/feeds/16150513236241462639/6304816192407876741")
e2ebd82bfeb3a9ec0fb505cc6f6379ea.png

Согласитесь, классно? Главное, все это сделано с помощью легко доступного сервиса и не стоит миллионы долларов, как различный аналитический софт для спецслужб. Используя примеры из этой статьи, вы с легкостью сможете запрашивать информацию даже с сайтов, не имеющих удобного API для обработки таких запросов.

А мы продолжим рубрику и в следующей статье расскажем о других возможностях электронных таблиц для анализа информации. В частности о визуализации данных на карте или в виде таймлайна. Удачи в работе с OSINT!

 
  • Теги
    google sheets osint информационная безопасность скраппинг скраппинг данных
  • Сверху Снизу