Собираем данные с Kimono

Kats Philipp
DADA science
Published in
10 min readFeb 2, 2015

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

UPD: в 2016 году Kimono был выкуплен Palantir Technologies и закрыт. Часть функционала можно продолжать использовать в настрольной версии.

Иногда вам может понадобиться собрать статистику по товарам в интернет-магазине, отслеживать курс валют или заголовки новостей, собирать данные о погоде или статистику просмотров роликов youtube. Действительно, стоит только задуматься (и освоить инструмент), как задачи подобного рода начинают плодиться как грибы.

Для решение подобных задач существуют и создаются так называемые Скрейперы (Scrapers) — то есть своего рода “экскаваторы данных”.

Здесь и далее скрейперы, или сборщики — это программное обеспечение, сервисы или программируемые скрипты для сбора данных непосредственно с веб-страниц, как правило, попутно сопряженного с структурированием собираемой информации

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

Если вы хотите почитать о скрейпинге чуть подробнее, то рекомендую начать вот с этой статьи. Кроме того, несмотря на некоторое устаревание (нет, например, Kimono), я всячески рекомендую книгу “Scraping for journalists

В своей практике я использую сразу несколько инструментов сбора, различающихся возможностями и временем разработки (подробнее в следующей статье). Сегодня я хочу рассказать о сервисе Kimono от KimonoLabs — наверное, наиболее удачным и мощным из “простых’” инструментов скрейпинга.

https://www.kimonolabs.com/

Kimono

Kimono — продукт двух партнеров, Райана Роу и Претапа Ренадэ.

Хотя подобных продуктов много (import.io, Outwit hub, и др.), Kimono оказалость технически наиболее удачным — интуитивно понятный даже ребенку, инструмент позволяет запустить сбор структурированных данных буквально за несколько минут.

Мотто продукта — Turn websites into structured APIs from your browser in seconds, и надо сказать, результат заявленному соответствует.

Для меня Kimono начался с статьи в Wired около полутра лет назад, и сейчас это один из основных моих инструментов.

Сильные стороны

Основных преимуществ Kimono три — продукт одновременно достаточно мощный, чтобы собирать данные из большинства источников, крайне быстр в настройке, и, что тоже важно, бесплатный (сейчас появилась платная версия с дополнительными, но незначительными фичами).

Кроме прочего, Kimono может работать в режиме обновления данных, фактически как back-end вашего проекта (вы просто обращаетесь к его базе данных по специальной ссылке); он также позволяет создавать сложносоставные скрейперы. (об этом чуть позднее)

Ограничения

Ограничения Кимоно достаточно простые и ожидаемые. Если вам нужно работать с Ajax , нажимать что-то на странице — kimono не для вас. Если данных очень много (речь идет о десятках тысяч строк) — скорее всего, тоже. И наконец, если у kimono не получается правильно спарсить страницу, как вам нужно — простите.

I. Интерфейс

Интерфейс скрейпера Кимоно

Работает Kimono как закладка в браузере или как приложение для Google chrome(настоятельно рекомендую второе). После нажатия поверх текущей страницы появляется минималистичный интерфейс (см. картинку).Если смотреть слева направо, то вы видите:

  1. Название текущей колонки (в данном случае соответствует желтому кружочку — колонке номер 1)
  2. Кружочки разного цвета. Каждый круг — новая колонка. Цифра означает количество собранных в рамках этой колонки элементов. При наведении появляется возможность удалить колонку. Всегда активна только последняя колонка
  3. Плюс позволяет создать новую колонку после того, как вы завершили работу с текущей
  4. Кнопка “бесконечность” появилась только сегодня. Она позволяет доскролливать вниз сайты с подгрузкой по скроллу (интересно, что будет, если включить на pinterest или facebook?). Дико крутая функция
  5. Кнопка книжки позволяет указать переключение страниц на сайте, чтобы скрейпер автоматически пролистал их все. Включив режим, вы должны указать (нажать) на сайте универсальную ссылку на сл. страницу. Если режим включен, при сборе данных скрейпер будет последовательно переключать страницы, пока не достигнет прописанного ограничения или последней страницы сайта.
  6. Кнопка undo
  7. Режим авторизации — позволяет Kimono войти и собрать данные там, где обычно нужно ввести ваш пароль и логин (QAuth)
  8. Три режима просмотра. Монитор соответствует просмотру страницы, Три палочки — режиму просмотра структуры данных (можно менять очередность колонок и разделять их на группы), последний режим позволяет увидеть результат в формате json, csv или rss (отсюда можно скопировать результат для текущей страницы)
  9. Done — кнопка сохранения скрейпера. После авторизации вы переходите на сайт kimono, откуда можете настраивать текущий или другие скрейперы (например, скормить скрейперу список ссылок для сбора данных.

Bonus

Часто вы будете замечать внизу странички выезжающий список уже готовых скрейперов для данного сайта (чужих или ваших), которыми вы можете воспользоваться. Количество скрейперов для Amazon.com, например, исчисляется тысячами.

III. Первые шаги

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

Уточнение фильтра данных. Скриншот из официального урока https://www.kimonolabs.com/learn/create-first-api

Механизм выбора ‘колонок’ простой — вы выделяете на странице типовой элемент, например, заголовок карточки, а Kimono предлагает вам другие аналогичные. Если они действительно структурно совпадают с вашими пожеланиями, вы подтверждаете его предложение, если нет — отклоняете. Как правило, после одного-двух подтверждений и отклонений Кимоно понимает, что же от него хотят (Разумеется, тут мы подразумеваем только структурный аспект данных. Данные, соответствеющие структуре страницы, но вам не нужные, придется отфильтровать позднее). Далее вы можете назвать колонку, и переходите к следующей колонке.

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

Кстати, Kimono может собирать и картинки (ссылки на них), и гиперссылки — в последнем случае будут созданы отдельные колонки для ссылки и для отображаемого текста.

Как правило, на эту часть у нас уходит от двух до пять минут — мы либо успешно завершаем скрейпер, либо понимаем, что данный сайт Kimono не по зубам, что тоже бывает.

Скриншот из официального урока https://www.kimonolabs.com/learn/create-first-api

IV. Настраиваем работу скрейпера

После нажатия на кнопку Done нам предложат авторизоваться, назвать и протегировать сборщик, после чего браузер перешлет нас на сайт для последующей настройки cкрейпера.

Скриншот. Основные разделы для скрейпера

Основная страница сборщика позволяет клонировать или редактировать API (перейти назад в редактирование на странице). Так же вы можете посмотреть результат, изменить источник, посмотреть статус. Вкладки позволяют посмотреть данные в табличном виде, поменять настройки. Так же для скрейпера есть свой раздел “Дискуссий”, где можно, например, логировать изменения версий.

Только что появилась фича модификации данных в процессе сбора (modyfy results).

И что дальше?

Во-первых, вы можете попросить Kimono продолжать собирать данные с этой страницы каждый час или день. при этом у вас есть выбор — хотите ли вы перезаписывать все данные, или добавлять к уже сохраненным. Зачем это нужно? Представьте например, что вы делаете проект о многодневной регате или отслеживаете котировки акций.

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

Второй вариант — у вас много страниц, с которых можно все собрать. Иногда нас спасает встроенный переключатель пагинации, но в большинстве случаев приходится отдельно собирать лист ссылок. Для этого Kimono предлагает несколько режимов. 1. Вы можете вставить список ссылок вручную 2. Вы можете сгенерировать список ссылок с помощью специального генератора (например, заменяя параметр для ‘p=’, который обычно отвечает за номер страниц в УРЛ) 3. Вы можете передать ссылки из одного скрейпера как целевые ссылки другому. Например, у вас есть интернет-магазин с товарами, представленный двумя типами страниц — общей матрицей со всеми товарами, их основными данными и ссылками на карточку каждого товара. Следовательно, вы можете отдельно собрать базу всех товаров с основными данными и ссылками, а детальную информацию по товарам получить уже целевым скрейпером по этим ссылкам.

Помимо самого скрейпинга, у Kimono есть несколько дополнительных опций. В первую очередь, вы можете ‘создать’ приложение-дэшборд, показывающее для вас данные. Это может быть удобно, если вы включили постоянное обновление данных, и беспокоитесь, все ли хорошо работает. Второй момент — помимо общей базы данных вы можете получать только определенные, сформулировав правильный запрос. Фактически, как Kimono и заявляет в своем мотто, вы можете создать API для любого сайта.

ПРИМЕР 1 (составной скрейпинг)

По долгу службы мне понадобилось сделать набор различных марафонов и забегов в Москве. И вот, как по запросу, нашелся неполный но очень неплохой Newrunners. Мне вполне хватило данных и с основной ссылке, но для учебного примера давайте предположим, что нам остро нужна графа “организаторы”, содержащаяся уже при переходе на страничку отдельного забега.

Таким образом, собрать данные придется в 2 этапа — общие данные и ссылки на детальные страницы (скрейпер I) и сборщик контактов с детальной страницы (скрейпер II)

Скрейпер I

Шаг 1.

Для начала определим url: http://newrunners.ru/race/

Шаг 2.

Зайдем на страницу и включим режим Kimono (решительно рекомендую установить chrome app). Результат должен выглядеть так:

Шаг 3.

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

Очень рекомендую хорошо подписывать названия колонок, причем обязательно на латинице

Режим структуры данных. В данном случае, включает и текст как отдельную колонку

Если все хорошо, то этот скрейпер завершен. Нажимаем Done, авторизуемся и входим на сайт kimono. Режим Manual оставляем без изменения.

Шаг 4.

Давайте посмотрим результаты на странице kimono.

Шаг 5.

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

Внимание: на данный момент существует серьезный баг, поэтому сохранять данные рекомендую через endpoints (верхний прямоугольник), select all(cmd+A), и сохраняем в текстовом редакторе как csv.

Скрейпер 2

Теперь мы переходим к детальной странице мероприятия.

Шаг 1.

Опять, давайте определим базовый url, например, этот: http://newrunners.ru/race/doroga-zhizni-2015//

Шаг 2.

Открываем Kimono и выделяем эмблемы организаторов (обратите внимание, что, например, контакты Кимоно сейчас схватить не может :-( ).

Шаг 3.

Сохраним скрейпер и протестируем его на других страницах.

Для этого в новой вкладке зайдем на страничку другого события, скопируем ссылку и заменим ее в нашем скрейпере (левый прямоугольник на картинке сверху). Попробуем отредактировать скрейпер заново (правый прямоугольник на картинке сверху).

Вроде бы, все работает правильно — все картинки спонсоров сохраняются, а в табличке, если вы посмотрите, сохраняется и встроенный текст пояснения к картинке — название организатора.

Важный момент. Впоследствии нам понадобиться сшить таблички, полученные двумя скрейперами. Для этого нужна общая колонка-ключ. Логично было бы сшивать по ссылке, однако (и это минус) Kimono не сохраняет источник в таблице, поэтому в таблицу обязательно нужно добавить что-то о мероприятии, одновременно уникальное и совпадающее с данными в первой нашей табличку. Например, название. Поэтому давайте добавим в наш детальный скрейпер колонку “Название”

Шаг 4.

Теперь мы должны скормить второму скрейперу набор ссылок, полученных из первого. Для этого перейдем в режим CRAWL и переключим режим (окно 1) в режим “urls from source API” (а если бы ссылки хранились списком, включили “Manual URL lib”).

Следом, выбираем наш первый Скрейпер и колонку с сылками, у меня она получила название collection1:name (окно 2,3). Если все сделано правильно, то в окне 4 должны появиться ссылки

Теперь, когда все готово, нажимаем кнопку старта (5) . С этого серверу нужно некоторое время. Мы можем переключить или даже закрыть вкладку. По результатам Скрейпер опишет, сколько страниц поддались сбору данных, сколько не получилось — в таком случае неудачные ссылки будут указаны.

Часто все зависит от удачи, поэтому иногда хорошо работает следующая техника: включить режим ‘сохранять все’ (переключатель слева), а в качестве режима выставит “Manual list”. После этого в поле со ссылками вставить все неполучившиеся ссылки, и прогнать скрейпер. Операцию можно повторить последовательно несколько раз, до победного. В крайнем случае все несобранные данные можно собрать вручную или специально настроенным отдельным скрейпером.

Шаг 5.

Как и в прошлый раз, сохраняем данные. Теперь нам нужно склеить две таблички вместе. К сожалению, этого kimono сделать не в состоянии, и я бы призвал на помощь Refine или отлаженный скрипт на R

ПРИМЕР 2 (автобновление)

Ну, тут все просто.

Шаг 1.

Возьмем, например, url: ria.ru (по старой памяти)

Шаг 2.

Собираем данные по погоде, дату и время (все находится в шапочке сайта)

Шаг 3.

При сохранении сборщика давайте переключим режим сбора из ручного (по запросу) в автоматический, например, за каждые 30 минут.

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

Шаг 4.

По умолчанию сервис каждый промежуток времени обновляет данные, то есть перезаписывает новые поверх старых. Если вам нужно сохранять все, то мы должны установить последний переключатель в режим ‘ON’ (сохранять все)

Важный момент. Хотя Kimono и позволяет обновлять данные достаточно часто, указанное время — скорее желаемое, чем действительное. В нашем случае, проблем никаких не будет, так как данных очень мало, но для чуть более сложных скрейперов время между сборами может быть большим. Сложные же скрейперы по хорошему придется постоянно проверять и, если нужно, включать в ручном режиме (для проверки идеально подходит свой Дэшборд-апп от Кимоно). Еще один вариант — перейти на платный аккаунт, который обещает приоритет в исполнении автоматизированных сборщиков.

Итоги

У Kimono есть множество ограничений и тонкостей, однако все они с лихвой перебиваются одним преимуществом — работа на Kimono делается за считанные минуты.

--

--