Очень часто компании хотят сравнить свои цены с ценами конкурентов или собрать справочник по ценам для нужд отдела закупок. Иногда поставщики или посредники идут на встречу и отправляют прайс-листы, в иных случаях данные можно "спарсить" из интернет-магазина.
Парсинг (от английского parse) - это автоматический разбор текста в соответствии с заданными правилами. В качестве текста могут выступать и таблицы, и интернет-страницы.
Сегодня мне пришла рассылка от одного из магазинов автотоваров, поэтому попробуем получить в таблицу список товаров, артикулов и цен.
Для начала зайдем в каталог:
По-умолчанию показывается только 15 карточек товара, а нам нужно отобразить все. Обращаем внимание, что если нажать на кнопку "выводить по 30", в адресной строке поменяется один из параметров.
Что если заменить его, например, на 300?
Действительно, отобразились все карточки. С такой страницей удобно работать в Google Таблицы с помощью функции IMPORTXML. Скопируем ссылку на эту страницу и вставим для удобства в ячейку A1 нашей таблицы, а в ячейке A3 начнем писать формулу:
=importxml(A1; "//a")
В таком виде формула покажет все блоки на страницы, находящиеся в тэге <a></a> - все ссылки. Но нам нужно немного другое. Чтобы понять, что именно нужно указать в формуле, посмотрим, какой код используется для отображения карточек товаров. Для этого нажмем на карточку товара правой кнопкой мыши и выберем пункт меню "Inspect Element"
На скриншоте желты помечены поля, которые нам нужны. А именно, нам нужны все поля типа div с параметром class="item-v-art" и с параметром class="row-price". Отредактируем формулу:
=importxml(A1;"//div[@class='item-v-art'")
Функция подтянула все карточки товара и разложила в два столбца (потому что в тэге <div class="item-v-art"> вложено два других тэга). Результат уже не плох. Осталось добавить цены. В третью колонку в ячейке C3 напишем похожую формулу:
=importxml(A1;"//div[@class='row-price'")
И вот, готовый результат. То, что нужно!
Получившаяся таблица доступна всем по ссылке: https://docs.google.com/spreadsheets/d/1oXIljzj-ahT8CTSrJqnTbVOzRj-ru0bwvtxjYVWz4Qg/edit?usp=sharing
Делитесь своими интересными кейсами в комментариях, окажу посильную помощь.