Парсинг сайтов в Excel
Возможности !SEMTools
↑ Навигация по задачам в Excel и возможностям надстройки !SEMTools ↑

Парсинг сайтов в Excel — это когда вы вставляете в столбец список адресов страниц, а надстройка сама скачивает каждую страницу и вытаскивает из неё нужное: цену, наличие, телефон, ссылку на картинку. Без браузера, без ручного копирования и без программирования.

Если нужно просто собрать Title, H1 и Description страниц, читайте статью про парсинг Title, H1 и Description. А здесь речь о произвольных данных со страниц, которые достаются с помощью регулярные выражения.

Что можно спарсить с сайтов в Excel

Типичные задачи, ради которых парсят сайты в таблицу:

  • цены и наличие товаров у конкурентов или у себя на сайте;
  • стоимость услуг: «от 450 ₽/м²», «выезд мастера 1 000 ₽»;
  • контактные данные: телефоны, e-mail, ссылки на мессенджеры;
  • картинки товаров: ссылки на фото, а затем и сами изображения прямо в ячейках;
  • ассортимент: сколько карточек товаров на странице категории.

Как работает парсинг регулярками в !SEMTools

Процедуры находятся на вкладке !SEMTools: Web (Парсинг, SEO, PPC) → Извлечь → Из URL → «Контент по RegEx-паттерну». В меню три команды:

  • «С учетом регистра» — находит в HTML-коде страницы все совпадения с регулярным выражением;
  • «Без учета регистра» — то же, но «Цена» и «цена» считаются одним и тем же;
  • «Посчитать вхождения» — возвращает не сами совпадения, а их количество.

Порядок работы простой:

  1. Вставьте в столбец полные адреса страниц, с https://.
  2. Скопируйте этот столбец рядом: результат запишется на место адресов, а исходный список ещё пригодится.
  3. Выделите ячейки с адресами, выберите команду и введите регулярное выражение.
  4. Дождитесь результата: надстройка по очереди скачает каждую страницу и запишет в ячейку найденное.

Если совпадений на странице несколько, они записываются в одну ячейку через три обратных слэша: «12 990\\\9 490». Разнести их по столбцам можно штатно: Данные → Текст по столбцам → С разделителями → «другой»: \ и галочка «Считать последовательные разделители одним».

Три вещи, которые важно знать заранее

  • Процедура возвращает совпадение целиком, а не отдельную группу в скобках. Поэтому паттерны строятся так, чтобы совпадение было уже «чистым», а лишнее при необходимости дочищается функциями REGEXEXTRACT и REGEXREPLACE (о них ниже).
  • Регулярные выражения работают по правилам движка VBScript: опережающая проверка (?=…) есть, а ретроспективной (?<=…) нет. Символ \s не включает неразрывный пробел, поэтому в ценах его нужно указывать явно: \u00a0 или &nbsp;.
  • Парсится исходный HTML-код страницы, тот, что видно по Ctrl+U в браузере. Если данные подгружаются скриптом после загрузки страницы, в коде их не будет, и паттерн ничего не найдёт. Всегда сначала проверяйте, что нужное есть в исходном коде.

Парсинг цен и наличия товаров

Цена в коде страницы обычно выглядит как число с пробелами перед знаком рубля. Этот паттерн забирает её целиком, вместе с обычными и неразрывными пробелами, но без самого знака:

\d+(?:(?:\s|&nbsp;| )\d{3})*(?=\s*(?:₽|руб))

На странице с ценой «12&nbsp;990 ₽» и старой ценой «15 490 ₽» результат будет «12&nbsp;990\\\15 490». Чтобы получить чистое число, примените к ячейке функцию REGEXREPLACE: она удалит всё, кроме цифр. Если цен в ячейке несколько, сначала разнесите их по столбцам.

=REGEXREPLACE(B2;"\D";"")

Надёжнее брать цену из микроразметки Schema.org, если она есть на сайте: там цена записана без пробелов и форматирования, а старая цена не мешает.

"price":\s*"?\d+

Наличие ищется по тексту на кнопке или в карточке. Порядок вариантов важен: «нет в наличии» должно стоять раньше «в наличии», иначе найдётся только вторая часть фразы:

[Нн]ет в наличии|[Пп]од заказ|[Вв] наличии

Или по той же микроразметке, где наличие записано однозначно: InStock, OutOfStock, PreOrder:

"availability":\s*"[^"]+"
Адрес страницыЦенаНаличие
https://shop.example.ru/nike-air-max-90/12 990В наличии
https://shop.example.ru/adidas-samba/9 490Нет в наличии
https://shop.example.ru/puma-suede/7 990Под заказ

Сбор стоимости услуг с сайтов конкурентов

На сайтах услуг цены редко бывают «голыми» числами: «от 450 ₽/м²», «от 3 500 руб. за шт». Этот паттерн забирает цену вместе с «от» и единицей измерения до ближайшей запятой или точки:

от\s*\d+(?:[\s ]\d{3})*\s*(?:₽|руб)[^,.<]*

А этот — только цены за единицу: за квадратный метр, час или штуку:

\d+(?:[\s ]\d{3})*\s*₽\s*/\s*(?:м²|м2|час|шт)

Так удобно сравнивать прайсы конкурентов: список страниц услуг в одном столбце, цены «от» в другом.

Сбор контактов с сайтов

E-mail на странице:

[\w.+-]+@[\w-]+\.[a-z]{2,}

Телефоны проще всего брать из ссылок tel:, там они записаны без скобок и дефисов:

tel:\+?\d+

Ссылки на WhatsApp и Telegram:

https://(?:wa\.me|t\.me)/[\w.]+

E-mail часто встречается на странице дважды: в ссылке mailto: и в тексте. После разнесения по столбцам повторы легко убрать процедурой удаления повторов слов. И пару слов об этике: собирайте контакты компаний для своей работы, а не для спам-рассылок.

Выгрузка картинок товаров

Главное фото товара почти всегда указано в мета-теге og:image, который сайт отдаёт соцсетям для превью:

<meta property="og:image" content="[^"]+"

Все картинки на странице находятся по тегу img:

<img[^>]+src="[^"]+"

Совпадение вернётся вместе с тегом. Сам адрес из него вытаскивает функция REGEXEXTRACT: она, в отличие от процедуры, возвращает содержимое скобок.

=REGEXEXTRACT(B2;"src=""([^""]+)")

Для og:image замените в формуле src на content. Если адрес начинается со слэша (/img/photo.jpg), допишите перед ним домен процедурой добавления текста в начало ячеек.

А дальше самое приятное. В том же меню «Из URL» есть процедура «Картинки»: выделите столбец со ссылками на изображения, и надстройка вставит сами картинки в соседний столбец, подогнав их под высоту строки. Увеличьте высоту строк заранее — получится наглядный каталог прямо в Excel.

Подсчёт карточек товара на странице (ассортимент)

Чтобы оценить ассортимент конкурента, считайте не сами товары, а повторяющийся элемент карточки. Откройте исходный код страницы категории, найдите класс блока карточки (например, product-card) и посчитайте его командой «Посчитать вхождения»:

class="product-card

Кавычку в конце не ставьте: у карточки бывают дополнительные классы, например «product-card product-card—sale». Если на сайте есть микроразметка, можно считать и её:

"@type":\s*"Product"

Процедура вернёт число для каждой страницы. Так за пару минут видно, в какой категории у конкурента 12 товаров, а в какой 120. Учтите только, что считается первая страница категории: если товары подгружаются кнопкой «Показать ещё» или разбиты на страницы ?page=2, добавьте эти адреса в список отдельно.

КатегорияКарточек на странице
https://shop.example.ru/krossovki/48
https://shop.example.ru/kedy/17
https://shop.example.ru/sandalii/6

Почему парсинг не находит данные — частые ошибки

  • Пустой результат, хотя на странице данные видны. Данные подгружаются скриптом и в исходном коде их нет. Проверьте по Ctrl+U в браузере.
  • Цена находится не вся: «990» вместо «12 990». Между цифрами стоит неразрывный пробел или &nbsp;, а паттерн его не учитывает. Используйте паттерн из этой статьи.
  • Паттерн «(?<=цена)…» выдаёт ошибку. Ретроспективная проверка в VBScript не поддерживается: ищите совпадение вместе с «якорем», а лишнее убирайте функцией REGEXREPLACE.
  • Сайт отвечает ошибкой или пустой страницей на часть запросов. Сработала защита от частых запросов: обрабатывайте список частями, а для проверки доступности страниц используйте процедуру «Коды ответа сервера» из того же меню.
  • Исходный список адресов пропал. Результат записывается на место ячеек: копируйте столбец с адресами перед запуском.

Если же нужно открыть страницы и посмотреть на них глазами, пригодится процедура, которая открывает все ссылки в браузере. А чтобы достать адреса из гиперссылок, есть процедура извлечения ссылок из гиперссылок.

Собирайте цены, наличие, контакты и картинки с сотен страниц прямо в Excel: список URL, регулярное выражение — и данные на месте, без браузера и ручного копирования.
!SEMTools решает эту и сотни других задач в пару кликов!

Итоги: что и как парсить в Excel

Надеюсь, на этой странице вы нашли то, что искали, и смогли настроить парсинг сайтов в Excel. Процедура «Контент по RegEx-паттерну» скачивает каждую страницу из списка и вытаскивает всё, что описано регулярным выражением: цены и наличие, стоимость услуг, контакты, картинки. «Посчитать вхождения» помогает оценить ассортимент, а функции REGEXEXTRACT и REGEXREPLACE дочищают результат.

Если с регулярками вы пока на «вы», начните со статьи про регулярные выражения в Excel: там шпаргалка по синтаксису и десятки готовых примеров.