Использование регулярных выражений
Общие сведения
В A-Parser применяются Perl/JavaScript-совместимые регулярные выражения, которые можно использовать:
- При парсинге произвольной информации с любых сайтов
- В конструкторе запросов для извлечения или замены части запроса
- В конструкторе результатов для преобразования любых результатов
- При использовании фильтров
- В конструкторе регулярных выражений
- При проверке доступности следующей страницы в парсере Net::HTTP
Подробную документацию по регулярным выражениям можно найти в следующих источниках:
- Регулярные выражения на WikiPedia
- Универсальная энциклопедия регулярных выражений стандарта PCRE
- Тема Делимся регулярками на форуме
В A-Parser существует возможность обрабатывать любой результат с помощью регулярного выражения, для этого используется опция Использовать регулярку:
Особенности использования и флаги
- Регулярные выражения записываются без ограничителей
//
- Поддерживаются следующие флаги:
- i - поиск без учета регистра символов
- s - точка включает все символы, включая перенос строк
- g - глобальный поиск или замена
Дополнительно возможно указать флаг в самой регулярке, например поиск слова test
в каждой строке всего текста (или кода страницы, смотря к чему применяется регулярка) с использованием флага m (multi line - символы ^
и $
работают как начало и конец строки соответственно):
(?m)^(.+?test.+?)$
Извлечение произвольной информации
С помощью опции Использовать регулярку или Конструктора результатов возможно использование регулярных выражений для извлечения произвольной информации из результатов парсинга, например из исходного кода HTML страниц или уже из подготовленных результатов
- В качестве Применить к выбирается результат от парсера, это может быть простой результат или массив
- Регулярное выражение указывается без ограничителей, следом есть возможность указать флаг
- В Тип результата указывается тип результата -
Flat
(простой результат) илиArray
(массив). Если в качестве исходного результата выбран массив или используется флаг g регулярного выражения то результат всегда будет сохраняться в массив. В поле Имя указывается имя массива - Каждая захватывающая скобка регулярного выражения может быть сохранена как отдельный элемент, название элемента записывается в соответствующее поле $1 to, $2 to... - где цифра обозначает номер захватывающей скобки
- В поле Регулярка можно использовать шаблонизатор, что позволяет использовать запрос как часть регулярного выражения
Созданные новые результаты можно использовать при форматировании результатов, в конструкторе результатов, в фильтрации и уникализации результатов или в следующей опции Использовать регулярку.
Данная опция схожа с конструктором результатов при использовании RegEx Match
Пример парсинга ссылок на картинки из исходного HTML кода
Чтобы решить эту задачу используем парсер Net::HTTP для получения исходного кода страницы.
Применяем к $data
(скачанная страница) регулярное выражение с флагами isg, результат сохраняем в элементы src
массива images
.
В формате результата указываем выводить все элементы src
через перенос строки.
В итоге парсинга для запроса http://a-parser.com/
в файле результата получим следующий список:
/img/lang/en.png
/img/lang/ru.png
img/[email protected]
https://files.a-parser.com/img/site/tour_ru/V1qpV.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_1_all_parsers_list.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_1_quick_task.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_2_task_editor_easy.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_3_task_editor_analyze_domains.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_4_task_editor_parse_emails.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_5_queue_fast_google.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_6_queue_spyserp.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_7_javascript_parser.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_8_scheduler.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_9_settings.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_10_proxies.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_11_templates.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_12_task_tester.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_13_parser_test.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_14_api.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_15_resources.png
data/avatars/s/0/12.jpg?1507557563
data/avatars/s/0/12.jpg?1507557563
data/avatars/s/13/13392.jpg?1570706020
data/avatars/s/16/16560.jpg?1586782475
data/avatars/s/1/1240.jpg?1537376153
styles/uix/xenforo/avatars/avatar_s.png
data/avatars/s/0/371.jpg?1412969226
styles/uix/xenforo/avatars/avatar_s.png
//mc.yandex.ru/watch/26891250
Скачать пример
Как импортировать пример в А-Парсер
eJxtVN9v2jAQ/l8sJArqYH3YS7Stokhomxgwmj5BJlnkyLz612yHFUX533d2Egfa
vYDv7rvvvvNdXBFH7bPdGLDgLEl2FdHhTBKSw5GW3JFboqmxYHx4R1bgkuRLmm7Q
HxEVcWcNmHMorVNiC7ZJNM0BuaijwS7gBc2PTBS7n5+zsTWH/d6OP/mf3XBPspvJ
+H4UTh08bZiZLSJh66LG0DM6w/+KigATtAAbkV4zwSIkq3uR6gTGsBwQxXK0j8oI
6kwn+kR56WGDhmvShG+GgyBWDkekzrJYYBGiHq7vJu3dxeAjPUGqfAnGoXcv0Gr1
DvBmwEe7MqOJe/EMNM+ZY0pS3lTwnfRVnyT7E0RKhVg8GgZ2YZRAl4NA4J3nTt2O
DIJNkKIMuT+aHJIcKbdwSyxKXVAUkr+OMAeGOmXW2utBf0WUnHG+hBPwHhb4H0rG
c1yV2RGTvraJ/4es33DUsb3LUjisvwY1RJZgPay/91m5WqqiuwzOBHNo27kqpR/M
e3Q+A+h4ZysPE8pALNMyt9Xxa9Ag/Wb0I5vp3nXVxtVYrp0HJY+sWLfb1iFLmeIn
t5ZzJTQH35csOcexWNj26zGz7Ri80Qt8nTwPJa4+VqcUt98eG6naMFy/D16gwJu8
rNpSHijnT9vlZYT0K4XGL+e0TaZT+q55BiYHJabEJzooFK4UtlVn8ZGIT0l18VQk
VY1j+m03Dcb35BHow8uxOAOS3NX/AFJvlP8=
Конструктор регулярных выражений
Начиная с версии 1.2.78 был добавлен Конструктор регулярных выражений.
Найти его можно на вкладке Инструменты -> Конструктор регулярных выражений. Также можно отправлять получаемый код страниц прямо в Тестовом парсинге. Для этого необходимо включить debug режим и кликнуть по ссылке Go to RegEx Builder.
В конструкторе есть возможность выбирать язык программирования в котором будут использоваться полученные регулярные выражения.
Для работы с конструктором нужно в поле слева вставить текст-источник (либо же он будет вставлен автоматически из Тестового парсинга при переходе Go to Regex Builder). Справа настраиваем параметры будущего регулярного выражения.
Для составления простого Регулярного выражения (например, для получения тайтла) достаточно указать нужные элементы регулярного выражения.
- В поле Перед группой вписываем символы, которые находятся перед той информацией которая нам нужна
- В поле После группы вписываем символы, которые находятся после нужных данных
- В поле Группа начинается с указываем символы, с которых должна начинаться искомая строка
- В поле Группа заканчивается указываем символы, которые должны быть в конце искомой строки
Как видно на скриншоте выше, мы составляем регулярное выражение, которое будет выбирать title сайта. Перед группой поставим <title>
и после группы </title>
, а также, для примера, укажем что искомая строка начиинается с буквы W
.
Для полноценного тестирования полученного регулярного выражения есть возможность включать нужные флаги: g, s и i.
Также можно составлять более сложные регулярные выражения, в которых 2 и более группы.
Для примера попробуем составить регулярное выражение для сбора всех ссылок и анкоров в списке <li>
. Для этого нам нужно включить флаг g
и добавить ещё одну группу поиска, так как в первой группе будут ссылки, а во второй анкоры.
Задав нужные параметры для обеих групп, получаем регулярное выражение:
<li><a href="(.+?)">(.+?)<\/a
Чтобы проверить регулярное выражение нажмите кнопку Тест:
После выполнения регулярного выражения, внизу отображается результат его работы: полная строка и захватываемые группы. При двойном клике на любой элемент в таблице результата, начальный текст прокручивается к месту нахождения данного совпадения.
Полезные ссылки
🔗 Рег. выражения для самых маленьких
Меня зовут Виталий Котов и я немного знаю о регулярных выражениях. Под катом я расскажу основы работы с ними...
🔗 Рег. выражения (regexp) — основы
Регулярные выражения — это механизм для поиска и замены текста. В строке, файле, нескольких файлах...
🔗 ⏩Парсим каталог пром. оборудования
Пример использования регулярок в парсинге каталога промышленного оборудования
🔗 ⏩Парсинг ресурса Booking.com
Пример использования регулярок в парсинге ресурса Booking.com
🔗 ⏩Поиск страниц контактов
Пример использования регулярок в парсинге страниц контактов