Урок №20. Использование регулярных выражений

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

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

Напомним, что в Datacol Вы так-же найдете уже готовые парсера:

Текст видео (если Вам проще воспринимать информацию после прочтения) »

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

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

Приведем простой пример. В настройке значение поля header собирается с помощью xpath выражения. Представим, что в один прекрасный день на сайте сменилась верстка, xpath перестал собирать данные и у нас не получается подобрать альтернативное xpath выражение. Запускаем тест, соответственно видим, что значение поля header не найдено. Подберем регулярное выражение, для сбора поля header. Для этого откроем загруженный исходный код в Selector-е.

Основное преимущество селектора, в контексте подбора сигнатур, заключается в том, что после тестирования в нем можно загрузить исходный код страницы именно в том виде, в котором он загружен Datacol. Кликнем левой кнопкой по заголовку поста, который должен собираться как значение поля header.

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

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

Осталось сгенерировать регулярное выражение. Используем пункт меню Создать regex как шаблон и Datacol автоматически генерирует регулярное выражение. Если вам интересно разобраться, почему Datacol сгенерировал регулярные выражения именно так, то вам стоит почитать справку по регулярным выражениям.

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

Все хорошо — значение поля header найдено.
Обратите внимание, в ряде случаев текст (по которому кликаем в браузере) может быть не найден в исходном коде. Тогда можно ввести часть текста, желательно ту, которая не разделена какими либо знаками препинания в блок Поиск текста и нажать кнопку Найти. Например: видим, что клик по тексту поста не дал результатов. Копируем его небольшую, но характерную именно для данного текста, часть, с помощью клавиатурного сокращения Ctrl+C. Вставляем в блок Поиск текста и нажимаем Найти. Как результат, текст найден в исходном коде.

Иногда бывает так, что ближайшие, окружающие текст теги не содержат характерных сигнатур, которые позволят создать уникальное регулярное выражение для вырезания конкретного текста. Например, подберем регулярное выражение для сохранения значения поля данных author. Находим вхождение обрамленное тегами. Генерируем регулярное выражение. Видим, что найдено более одного соответствия, причем нужное нам значение не является первым. В таком случае, расширим область для привязки к тегам и сгенерируем новое регулярное выражение. Теперь совпадение одно, причем оно содержит нужное нам значение. Перенесем регулярное выражение в настройку. Протестируем.

Видим, что в поле author сохраняется лишний текст. В таком случае его можно быстро удалить с помощью замен. Для этого включим сохранение тегов и запустим тестирование еще раз. Теперь мы видим, что для удаления лишнего, нужно создать 2 замены: одна обрежет поле с начала до характерной лишней подстроки, другая обрежет поле начиная с характерной лишней подстроки и до коцна. Тестируем. Видим, что лишний текст вне тегов исчез. Включаем сохранение тегов. Еще раз тестируем. Видим, что все собирается так, как нам нужно.

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

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

Кроме того, регулярные выражения можно указывать одновременно с xpath выражениями. В данном случае принцип аналогичен, однако первым будет осуществляться поиск по xpath выражениям.

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