Поговорим об использовании электронных таблиц в работе OSINT-аналитиков. В
Для просмотра ссылки необходимо нажать
Вход или Регистрация
нашего цикла статей мы обсуждали автоматизацию генерации
Для просмотра ссылки необходимо нажать
Вход или Регистрация
(расширенных операторов поисковых запросов). Сегодня раскроем тему скрапинга: разберем основы, сделаем сервис для пробива судимостей и чтения RSS, а также интегрируем поисковые выдачи с сайтов в наши Таблицы.Что такое скрапинг?
Веб-скрейпинг (или скрепинг, или скрапинг от англ. 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;
}
}
Теперь непосредственно к скрапингу. За его запуск в Google Sheets отвечает функция =IMPORTXML. Для начала давайте попробуем скопировать данные из описания Telegram-канала, расположенного по адресу
Для просмотра ссылки необходимо нажать
Вход или Регистрация
. Создаем новую таблицу... К слову, для этого можно просто ввести sheet.new в адресной строке браузера Chrome. В ячейку A2 помещаем адрес
Для просмотра ссылки необходимо нажать
Вход или Регистрация
. Теперь ставим в ячейку B2 функцию:
Код:
=IMPORTXML(A2; "//title")
Это позволит скопировать в таблицу заголовок веб-страницы.
Попробуем использовать другую функцию:
Код:
=IMPORTXML("https://web.archive.org/cdx/search/cdx?url=t.me/tomhunter"; "//body")
Код:
=JOIN(CHAR(10); IMPORTXML(A2; "//html/body"))
Почистим полученные данные. Для этого создадим следующую формулу:
Код:
=MID(B4;1;SEARCH(" var ";B4)-1)
С ее помощью мы удалим текст, содержащийся в ячейке, начиная с определенного символа или слова. В нашем случае, это «var», с которого начинается техническая информация веб-страницы.
Теперь вытащим из полученных данных контакты, которые указаны в описании канала. Для этого мы используем формулу =REGEXEXTRACT, а также регулярные выражения. Регулярное выражение — это шаблон, который обработчик регулярных выражений пытается сопоставить с введенным текстом. Так, например, регулярное выражение, по которому программа распознает в тексте адрес электронной почты, будет следующим:
Код:
[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}
Код:
=REGEXEXTRACT(B4; "[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}")
Вы можете использовать такие регулярные выражения для поиска в тексте ячейки номеров телефонов, никнеймов пользователей, гиперссылок, хэштегов и иной значимой информации.
Скрапинг по судам и физлицам
Теперь давайте попробуем применить описанное выше на примере канала в Telegram для обмена данными с сайтом судебных решений:
-
Для просмотра ссылки необходимо нажать Вход или Регистрация
Для просмотра ссылки необходимо нажать
Вход или Регистрация
и сгенерируем готовую гиперссылку, которая будет содержать страницу поиска
Для просмотра ссылки необходимо нажать
Вход или Регистрация
и запрос типа «Фамилия И.О.». Проиллюстрирую на примере уже известного нам Бабеля Михаила Александровича, находящегося в федеральном розыске. -
Для просмотра ссылки необходимо нажать Вход или РегистрацияМ.А.
Код:
=JOIN(CHAR(10); IMPORTXML(A2; "//html/body"))
Получилась куча неструктурированных данных. Чтобы разделить ее, воспользуемся формулой =SPLIT. Например:
Код:
=SPLIT(A3; "~")
Это позволит нам разнести данные из ячейки A3 по другим ячейкам в том случае, если между блоками в тексте будет присутствовать символ ~.
Попробуем и здесь очистить поисковую выдачу. Предположим, что нас интересует получение только номеров судебных дел. В таком случае, мы можем составить следующую формулу:
Код:
=MID(D3;1;SEARCH(" от ";D3)-1)
И как видно на скриншоте, отдельной ячейкой мы вывели интересующие нас номера. А по итогам работы с Google Sheets и скрапинга по сайту судебных решений мы получаем удобный сервис, позволяющий парой кликов в таблице находить всю интересующую нас здесь информацию о физических лицах.
Скрапинг по коду сайта
Перейдем к более сложным формам скрапинга. Итак, у нас есть поисковая выдача со страницы
Для просмотра ссылки необходимо нажать
Вход или Регистрация
М.А. Зайдем на эту страницу, кликнем правой кнопкой мыши и выберем функцию «Просмотреть код». В правой части экрана откроется код веб-страницы. Нажимаем «Элементы» — «Выбрать элементы на странице для проверки». Далее кликаем на элемент, который выводит все результаты найденных судебных решений. Копируем адрес нужного элемента в формате Xpath. Должно получиться что-то похожее:
Код:
/html/body/div[1]/div[6]/div/div[2]/div[3]/ul
Теперь пишем новую формулу:
Код:
=IMPORTXML(A1; "/html/body/div[1]/div[6]/div/div[2]/div[3]/ul")
Она позволит выгрузить в таблицу только те сведения, которые содержатся в выбранном элементе, а также разнести их по соседним ячейкам. Попробуем воспроизвести эту функциональность для страницы описания нашего Telegram-канала. Формула будет следующая:
Код:
=IMPORTXML(A1; "//html/body/div[2]/div[2]/div/div[4]")
Использование формулы позволило выгрузить построчно описание канала в нашу таблицу. Теперь распространим формулу для исследования группы каналов. Для этого можно ее растянуть в таблице.
Хочу также отметить, что в нашу таблицу мы можем импортировать и RSS-фиды. За это отвечает функция =IMPORTFEED. Допустим, что мы сгенерировали RSS-поток при помощи Google Alerts. Вывести его в таблицу можно при помощи следующей формулы:
Код:
=IMPORTFEED ("https://www.google.be/alerts/feeds/16150513236241462639/7461767585858944553")
Или при помощи такой:
Код:
=IMPORTFEED ("https://www.google.be/alerts/feeds/16150513236241462639/6304816192407876741")
Согласитесь, классно? Главное, все это сделано с помощью легко доступного сервиса и не стоит миллионы долларов, как различный аналитический софт для спецслужб. Используя примеры из этой статьи, вы с легкостью сможете запрашивать информацию даже с сайтов, не имеющих удобного API для обработки таких запросов.
А мы продолжим рубрику и в следующей статье расскажем о других возможностях электронных таблиц для анализа информации. В частности о визуализации данных на карте или в виде таймлайна. Удачи в работе с OSINT!
Для просмотра ссылки необходимо нажать
Вход или Регистрация