Обробка регулярним виразом отриманих даних доступна вже давно, завдяки такій карколомної функціональності Fenom. А з версії 1.3.0 регулярки були впроваджені:
- в конфігурацію завдання при вказівці записи селектора,
- в поля джерела.
Користувачеві це дає більш гнучку вибірку записів з джерела.
Опишу приклад того, як я перекручували за допомогою регулярок в xParser.
дано
Виникла потреба розпарсити сайт, що має дивну структуру записів. На CSS або XPath синтаксисі до них було підібратися. Приклад дивною структури:
<Div class = content> <p> <h2> Якийсь заголовок </ h2> Текст з описом розділу <p> 18.01.10 <a href="http://domain.zone/link1.html"> Запис 1 </a> <br> Опис записи 1 <p> 24.12.09 <a href="http://domain.zone/link2.html"> Запис 2 </a> <br> Опис записи 2 <p> 23.12 .09 <a href="http://domain.zone/link3.html"> Запис 3 </a> <br> Опис записи 3 <p> 22.12.09 <a href = "http://domain.zone /link4.html">Запісь 4 </a> <br> Опис записи 4 ... </ div>
Що ми маємо:
- Запис не міститься в окремому контейнері. Звідси складність отримати її. Можна вирішити за рахунок регулярки!
- Теги <p> в кожному записі відкриті, але не закриті. Вирішується внутрішніми засобами xParser без вашої участі!
- Тег <br> може стояти, як відразу після посилання, так і на наступному рядку під нею. Можна вирішити за рахунок регулярки!
Версія xParser нижче 1.3.0 не справлялася з цим, чесно скажемо ...
вибірка записи
Як завжди, ми створюємо завдання. Тільки тепер при вказівці селектора записи в конфігурації завдання, ми можемо вибрати синтаксис, серед яких: CSS, XPath, RegExp. Нам потрібні регулярні вирази!
Ось таку регулярку я склав для вибірки записів з дивною структури:
/<p>\s?([0-9]{2}\.[0-9]{2}\.[0-9]{2}) <a href = "([^"] +) " > (. +) <\ / a> \ s? <br> \ s? (. *) \ s? <\ / p> / ui
Таким чином ми отримаємо кожну запис на сторінці. Всього їх було близько 100 шт.
поля джерела
Після чого нам треба розпарсити поля джерела. Це я теж реалізував на регулярних виразах:
Посилання:
- Синтаксис = RegExp
- Ключ = link
- Селектор: /<a.*href="([^"]+)/ui
Дата:
- Синтаксис = RegExp
- Ключ = date
- Селектор = /<p>\s?([0-9]{2}\.[0-9]{2}\.[0-9]{2})/ui
опис:
- Синтаксис = RegExp
- Ключ = description
- Селектор = /<p>\s?[0-9]{2}\.[0-9]{2}\.[0-9]{2} <a href="[^"]+">. + <\ / a> \ s? <br> \ s? (. *) \ s? <\ / p> / ui
Разом
За допомогою регулярних виразів можна парсити навіть найскладнішу структуру. Тому всім раджу вивчати регулярки, хоча б на тому рівні, на якому знаю їх я.
Lt;a href = "([^"] +) " > (. +) <\ / a> \ s?Lt;br> \ s?
S?
S?