Все сталкивались с ситуацией, когда нужно собрать и систематизировать большое количество информации. Для стандартных задач по 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.
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, что эти данные нужно разместить в новом столбце.
4. Кликнув на фигурные скобки <> и выбрав «CSV», можно увидеть, как выбранные данные будут располагаться в таблице.
5. Когда все данные отмечены:
- кликаем «Done» (в правом верхнем углу);
- логинимся в Kimono, чтобы привязать API к своему аккаунту;
- вводим название будущего АРI;
- кликаем «Create API».
Создаем новое API в Kimono
6. Когда API создано, переходим в таблицу Google, куда хотим загрузить выбранные данные. Выбираем «Connect to Kimono» и кликаем на название нашего API — «Resorts». Список стран и ссылок на страницы с курортными городами выгружается на отдельный лист.
После синхронизации Kimono выгружает данные на отдельный лист
7. Переходим снова на сайт, берем для примера Ирландию, и снова выбираем через Kimono города, которые необходимо спарсить. Создаем API, называем его «Resorts in countries».
8. Переходим по ссылке в Kimono Labs. Теперь нам нужно спарсить список курортных городов по всем странам, а не только по Ирландии. Чтобы это сделать, переходим на вкладку «Crawl setup».
9. В «Crawl Strategy» выбираем «URLs from source API». Появляется поле с выпадающим списком всех API. Выбираем созданное нами ранее API «Resorts» и из него автоматически загружается список URL для парсинга. Кликаем синюю кнопку «Start Crawl» (начать обход) и следим за статусом парсинга. Kimono обходит страницы, парсит данные по заданному ранее шаблону и добавляет их в таблицу — то есть делает все то же самое, что и для Ирландии, но уже для всех других стран, что ввели автоматически и без нашего участия.
Как добавить в Kimono список URL для парсинга, используя уже существующий API
10. Когда таблица сформирована, синхронизируем Kimono Labs с таблицей Google — точно так же, как делали это в шестом пункте. В результате, в таблице появляется второй лист с данными.
Выгружаем полученные данные из Kimono Labs в Google SpreadSheets.
Предположим, хотим, чтобы в таблице отображались все курортные города в стране города прибытия. Данные на листах Kimono обрабатываем с помощью формул для таблиц Google, и выводим в строку список городов, где еще можно отдохнуть в Австралии, кроме Сиднея.
Например, это можно сделать так. Разметить массив данных (список городов), используя логические функции и возвращая значение ячейке, равное TRUE или FALSE. На примере ниже выделили для себя города, которые находятся именно в Австралии:
- TRUE = город находится в Австралии;
- FALSE = город находится в другой стране.
По меткам TRUE определяем начало и конец обрабатываемого диапазона, и выводим в строку соответствующие этому диапазону города.
Конечная обработка данных
Отображаемый результат
По аналогии можем вывести курортные города и для других стран.
Мы специально привели здесь достаточно простой и пошаговый пример — формулу можно усложнить, например, сделать так, чтобы достаточно было ввести страну в колонку С, а все остальные вычисления и вывод городов в строку происходили автоматически.
Результаты автоматизации
Как говорилось вначале, нам регулярно нужно составлять по 20 однотипных таблиц. Это рутинный процесс, съедающий по 40-50 минут на одну таблицу, и по 16 часов времени на каждые 20 шт. Согласитесь, 2 рабочих дня на одинаковые таблички — необоснованная трата времени. После автоматизации на одну таблицу уходит 5-10 минут, а на 20 — около 2 часов. Таблица имеет 17 ячеек, парсинг производится из 5 источников. Заполнение таблицы происходит автоматически при заполнении всего 2 ячеек с исходными данными.
Настройка и автоматизация парсинга суммарно заняла 30 часов времени, то есть потраченное время «окупится» уже на этапе генерации второй 20-ки таблиц.
Автоматизация парсинга больших объемов данных и их обработки дает хорошие результаты. В нашем случае, на составлении каждых 20 таблиц экономим 14 часов рабочего времени специалистов, и приличную сумму клиентских средств :)
Полезные ссылки:
UPD: 18.02.2016. Облачный сервис Kimono закрывается 29 февраля 2016. С этого дня данные на kimonolabs.com не будут доступны. На описанный в статье метод апдейт не повлияет. Для парсинга остается приложение Chrome.
Комментарии (43)
Последние комментарии
Чтобы оставить комментарий, нужно войти