Блог про интернет-маркетинг для бизнеса

SEO

Автоматизированный парсинг сайтов с помощью Kimono и таблиц Google

180
48
10
96

Все сталкивались с ситуацией, когда нужно собрать и систематизировать большое количество информации. Для стандартных задач по SEO-оптимизации сайта есть готовые сервисы, например, Netpeak Checker — для сравнения показателей конкурирующих сайтов или Netpeak Spider — для парсинга внутренней информации по сайту. Но что, если задача нетривиальна и готовых решений нет? Есть два пути: делать все руками и долго, или загнать рутинный процесс в матрицу, автоматизировать его и получать результат в разы быстрее. О таком кейсе и пойдет речь.

Что такое парсинг сайтов и зачем он нужен

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

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

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

В нашем случае нужно было регулярно составлять по 20 однотипных таблиц, и на одну таблицу уходило по 40-50 минут.

Перед нами стояла цель: автоматизировать извлечение данных с других сайтов для каждой из ячеек этой таблицы и ускорить составление таблиц.

Что будем использовать для парсинга

Для парсинга нам понадобятся:

  • приложение-скрейпер для Google Chrome — Kimono;
  • таблицы Google Docs;
  • несколько базовых выражений на xPath для формулы importxml.

Парсинг данных с помощью функции importxml в таблицах Google

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

  • таблица Google Docs;
  • несколько базовых выражений на xPath для формулы importxml.

Вначале находим сайт, на котором есть необходимая нам информация. Вводим два города, а расстояние должно расположиться в третьей ячейке таблицы. Что сделать, чтобы спарсить часть нужной нам информации в таблицу Google? Использовать importxml. Как правильно использовать importxml Определяем, в каких HTML-тегах заключена нужная нам информация

1. Кликаем правой кнопкой мыши на заголовке с расстоянием и выбираем «Просмотр кода элемента». Необходимая строка заключена в html-тэге h1.

2. Проверяем адрес страницы — он имеет подходящий вид (http://marshrut.su/rasstojanie/mezhdu-gorodami/mezhdu-gorodami?ot=Астана&do=Варшава).

3. Формируем URL с помощью оператора «concatenate» — склеиваем части адреса и введенные нами города.

=concatenate("http://marshrut.su/rasstojanie/mezhdu-gorodami/?ot=";A3;"&do=";B3)

4. Используем «importxml» — первым аргументом будет «concatenate» (формируемый им URL), вторым — простое выражение на xPath — «//h1». Так мы указали, что необходимо спарсить в ячейку таблицы все заголовки h1. Нам повезло — такой заголовок используется один раз на странице, поэтому нам не придется обрабатывать массив данных.

=importxml(concatenate("http://marshrut.su/rasstojanie/mezhdu-gorodami/?ot=";A3;"&do=";B3); "//h1")

5. Получаем всю строку «Расстояние от… до… км». Обрезаем лишнее из этой строки с помощью «mid». Чтобы вычислить длину отрезка, который необходимо сократить, определим длины названий городов с помощью «len» и просуммируем с длинами других слов. Получаем конечную формулу:

=mid(importxml(concatenate("http://marshrut.su/rasstojanie/mezhdu-gorodami/?ot=";A3;"&do=";B3); "//h1");len(B3)+len(A3)+19;10)

Теперь можем ввести сколько угодно пар городов, «протянуть» ячейку C2 вниз и моментально получить все расстояния между этими городами. Теперь можем ввести сколько угодно пар городов

Формула парсинга расстояния между городами в Google SpreadSheets

Парсинг данных с помощью importhtml

Нам понадобится:

  • только таблица Google Docs.

Можно получать данные без знания xPath — через importhtml. Для использования этой формулы достаточно указать URL, тип (таблица или список) и номер. Формула импортирует массив данных, с которым дальше можно будет работать при помощи формул таблиц Google.

Формулы парсинга работают не всегда, все зависит от верстки страницы. Если importxml не подходит — пробуйте importhtml. Если и он не работает — используйте Kimono. А можно и вовсе начать с Kimono.

Парсинг данных с помощью Kimono

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

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

Познакомиться поближе и получить краткий мануал об использовании можно здесь (на русском) или на moz.com (на английском). Давайте попробуем спарсить что-нибудь хорошее с помощью Kimono. Например, дополним созданную нами таблицу с городами списком курортов в стране Города 2. Как это можно реализовать при помощи Kimono Labs. Нам понадобятся:

  • приложение для Google Chrome — Kimono;
  • таблица Google Docs.

1. Находим сайт с необходимой нам информацией — то есть перечнем стран и их курортов. Открываем страницу, откуда необходимо получить данные.

2. Кликаем на иконку Kimono в правом верхнем углу Chrome.

3. Выделяем те части страницы, данные из которых нам необходимо спарсить. Если нужно выделить новый тип данных на той же странице, кликаем на «+» справа от «property 1» — так указываем Kimono, что эти данные нужно разместить в новом столбце.

Все страны на странице выделены с помощью Kimono (приложение Chrome) Все страны на странице выделены с помощью Kimono (приложение Chrome)

4. Кликнув на фигурные скобки <> и выбрав «CSV», можно увидеть, как выбранные данные будут располагаться в таблице.

Предварительный просмотр расположения данных в таблице Предварительный просмотр расположения данных в таблице

5. Когда все данные отмечены:

  • кликаем «Done» (в правом верхнем углу);
  • логинимся в Kimono, чтобы привязать API к своему аккаунту;
  • вводим название будущего АРI;
  • кликаем «Create API».

Создаем новое API в Kimono Создаем новое API в Kimono

6. Когда API создано, переходим в таблицу Google, куда хотим загрузить выбранные данные. Выбираем «Connect to Kimono» и кликаем на название нашего API — «Resorts». Список стран и ссылок на страницы с курортными городами выгружается на отдельный лист.

Синхронизируем Kimono с Google SpreadSheets Синхронизируем Kimono с Google SpreadSheets

После синхронизации Kimono выгружает данные на отдельный лист

После синхронизации Kimono выгружает данные на отдельный лист

7. Переходим снова на сайт, берем для примера Ирландию, и снова выбираем через Kimono города, которые необходимо спарсить. Создаем API, называем его «Resorts in countries». Задаем Kimono шаблон для парсинга Задаем Kimono шаблон для парсинга

8. Переходим по ссылке в Kimono Labs. Теперь нам нужно спарсить список курортных городов по всем странам, а не только по Ирландии. Чтобы это сделать, переходим на вкладку «Crawl setup».

Расположение вкладки по настройкам обхода страниц в Kimono Labs Расположение вкладки по настройкам обхода страниц в Kimono Labs

9. В «Crawl Strategy» выбираем «URLs from source API». Появляется поле с выпадающим списком всех API. Выбираем созданное нами ранее API «Resorts» и из него автоматически загружается список URL для парсинга. Кликаем синюю кнопку «Start Crawl» (начать обход) и следим за статусом парсинга. Kimono обходит страницы, парсит данные по заданному ранее шаблону и добавляет их в таблицу — то есть делает все то же самое, что и для Ирландии, но уже для всех других стран, что ввели автоматически и без нашего участия. Как добавить в Kimono список URL для парсинга, используя уже существующий API

Как добавить в Kimono список URL для парсинга, используя уже существующий API

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

Выгружаем полученные данные из Kimono Labs в Google SpreadSheets

Выгружаем полученные данные из Kimono Labs в Google SpreadSheets.

Предположим, хотим, чтобы в таблице отображались все курортные города в стране города прибытия. Данные на листах Kimono обрабатываем с помощью формул для таблиц Google, и выводим в строку список городов, где еще можно отдохнуть в Австралии, кроме Сиднея.

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

  • TRUE = город находится в Австралии;
  • FALSE = город находится в другой стране.

Выделение необходимой части данных из всего массива с помощью формул таблиц Google Выделение необходимой части данных из всего массива с помощью формул таблиц Google

По меткам TRUE определяем начало и конец обрабатываемого диапазона, и выводим в строку соответствующие этому диапазону города.

Конечная обработка данных

Конечная обработка данных

Отображаемый результат

Отображаемый результат

По аналогии можем вывести курортные города и для других стран.

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

Результаты автоматизации

Как говорилось вначале, нам регулярно нужно составлять по 20 однотипных таблиц. Это рутинный процесс, съедающий по 40-50 минут на одну таблицу, и по 16 часов времени на каждые 20 шт. Согласитесь, 2 рабочих дня на одинаковые таблички — необоснованная трата времени. После автоматизации на одну таблицу уходит 5-10 минут, а на 20 — около 2 часов. Таблица имеет 17 ячеек, парсинг производится из 5 источников. Заполнение таблицы происходит автоматически при заполнении всего 2 ячеек с исходными данными.

Настройка и автоматизация парсинга суммарно заняла 30 часов времени, то есть потраченное время «окупится» уже на этапе генерации второй 20-ки таблиц.

Ручная работа vs. автоматизация

Автоматизация парсинга больших объемов данных и их обработки дает хорошие результаты. В нашем случае, на составлении каждых 20 таблиц экономим 14 часов рабочего времени специалистов, и приличную сумму клиентских средств :)

Полезные ссылки:

Welcome to comments Возникли вопросы или что-то не получается? Будем рады помочь в комментариях.

UPD: 18.02.2016Облачный сервис Kimono закрывается 29 февраля 2016. С этого дня данные на kimonolabs.com не будут доступны. На описанный в статье метод апдейт не повлияет. Для парсинга остается десктоп версии и приложение Chrome. Подробнее, как это случилось и почему — в публикации команды Кимоно.

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

  1. 0
    3 месяца назад

    http://prntscr.com/b4ut4k добрый день, подскажите что за ошибка при запуске кимоно?

    • 0
      Владимир
      3 месяца назад

      Здравствуйте. Какие именно действия Вы предпринимали? Что запускали - приложение в браузере или декстоп версию? Отрывно от контекста, не зная действий и бекраунда по системе, сложно сказать.

  2. 0
    6 месяцев назад

    Добрый день! Подскажите можно ли как-то увеличить скорость парсинга Kimono, 80 url обрабатываются уже 20 мин

    • 0
      Наталья
      6 месяцев назад

      Увеличить скорость в бесплатном варианте - никак. Раньше Кимоно работал быстрее, последнее время парсит немного дольше обычного. Здесь правда важно что именно Вы парсите и насколько большой объем данных берется с каждого url. Длительность парсинга может быть связана с тем, что Кимоно подбирает частоту обращений к документам или меняет источник обращения - чтобы не забанили доступ к ресурсу.

  3. 0
    9 месяцев назад

    wget+grep+awk. А для серьезных задач можно почитать о selenium.

    • 0
      Dmitry Korchagin
      9 месяцев назад

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

  4. 0
    10 месяцев назад

    "Нам повезло — такой заголовок используется один раз на странице, поэтому нам не придется обрабатывать массив данных."

    А если заголовок будет использоваться не один раз, а несколько? Как примерно указать какой нужно парсить?

  5. 0
    год назад

    Спасибо за клевый пост!
    Поделись пожалуйста ссылкой на докс, чтобы можно было поизучать формулы =)

    • 1
      Андрей Яроменко
      год назад

      Ссылка на таблицу в посте: https://docs.google.com/spreadsheets/d/1fsGVGZfIs7-xyGBi0jbFkoq26EFg0ZZxkcq9lRDJ4No/edit?usp=sharing

      Для удобной работы с таблицей лучше сразу сохранить ее к себе (Файл --> Создать копию) - так будут права редактирования.

      • 0
        polza1
        год назад

        Еще бы написали как переводить текст в число. Ведь например ваши полученные данные потом невозможно ни разделит, ни умножить, так как там точка, и это не число а текст.

        • 0
          Сергей
          11 месяцев назад

          Для изменения формата значения: выделите его и выберите в меню Формат --> Число.

  6. 1
    год назад

    Не просто в закладки добавил а сохранить как... отличная статья ..

    • 0
      dmitrymw
      год назад

      Спасибо за отзыв. Надеюсь статья будет Вам полезна:)

  7. 0
    год назад

    Можете привести 3 примера использования такого парсинга? (практических)

    • 0
      Maksim Gordienko
      год назад

      1. Для наполнения сайта - подтянуть и обработать разрозненные данные для составления статей или обзоров, напрямую подтягивать на сайт нужные данные.
      2. Для быстрой проверки изменений по сайту - например, если речь идет об интернет-магазине, и Вы поставили ТЗ добавить во все описания товаров артикул. Если в магазине 2 тыс. товаров, просматривать их все вручную не очень удобно. Можно спарсить описания до изменений и, повторно, после внедрения изменений. А в Google Docs сопоставить и выводить результат (одинаковые или нет, содержат ли определенную инфо - то же слово "артикул").
      3. Для отслеживания изменений в выдаче поисковых систем - изменений в ранжировании своего сайта и сайтов конкурентов по отдельным запросам или появились ли новые страницы Вашего сайта в выдаче.

  8. 1
    год назад

    На самом деле достаточно самых выражений xpath. Просто уже привычно, что seo и ppc не особо ориентируются в программировании, а подобная автоматизация воспринимается как ноу-хау.
    Для них эта статья действительно несет в себе полезность. От меня лайк.

  9. 0
    год назад

    решение бесплатное? ввод каких-то данных в формы на сайте (например аутентификация) реализуется только руками? можно ли настроить регулярное выполнение алгоритма парсинга (например, каждый час или по вторникам)

    • 0
      Александр Андросов
      год назад

      1. Решение бесплатное.
      2. Если речь идет о базе данных, где для поиска нужной информации нужно предварительно ввести запрос, и этот запрос никак не отображается в GET-параметрах конечного URL нужной нам страницы - парсить не будет. Если параметры отображаются в URL - тогда можно составить список страниц с нужными нам запросами и провести парсинг по ним.
      Пример, когда запрос отображается в структуре URL - выдача Google. При вводе любого запроса в строку поиска, структура URL с результатами включает в себя слова из запроса.
      3. Можно настроить регулярное выполнение парсинга при помощи Kimono на вкладке Crawl Setup - см. скрин.
      4. При регулярном обновлении есть 2 режима для Always Save - ON - когда новые данные добавляются к старым и OFF - когда информация обновляется без сохранения предыдущих результатов - скрин 2 http://i59.fastpic.ru/big/2015/0326/79/365df5ff961bb7a4d2a745b620e9b879.jpg

    • 0
      Александр Андросов
      год назад

      Аутентификацию также можно настроить.

  10. 1
    год назад

    Спасибо за статью.

  11. 2
    год назад

    Автоматизация решает, прочь рутину ;)

  12. 1
  13. 0
    год назад

    На самом деле, каждому сеошнику неплохо бы выучить основы php. Займет это около месяца, но жить станет легче ;)

    • 0
      Дмитрий
      год назад

      Бесспорно, автоматизация с помощью любого языка программирования делает жизнь проще:)

  14. 1
    год назад

    Респекты за автоматизацию (экономию времени) и пост.

  15. 0
    год назад

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

    • 0
      3pc
      год назад

      Да, мне тоже некоторые парсеры нравятся, есть очень даже удобные и мощные (и платные). В посте же описаны варианты, которые можно использовать сразу, используя привычную среду таблиц Google или Chrome.

      В любом случае, вариантов для парсинга есть множество и здесь не о чем спорить)

  16. 2
    год назад

    норм нужно попробовать!

  17. 0
    год назад

    Велосипед такой велосипед. Лучше КД для парсинга еще не придумали http://sbfactory.ru/?p=600

    • 0
      petr
      год назад

      Для простых задач можно обойтись, для парсинга в промышленных масштабах - хорошая вещь.

Чтобы оставить комментарий, необходимо авторизироваться

Подписаться

на самую полезную рассылку по интернет-маркетингу

Самое

обсуждаемое популярное читаемое