4.5 Знайомство з інструментами вилучення - екстракцією
Екстрактор пошукача WebMagic extraction базується на використанні Jsoup і моїй власній розробці Xsoup.
4.5.1 Jsoup
Jsoup це простий HTML-парсер, що підтримує використання CSS селекторів, як спосіб знайти елементи. Для цілей розробки WebMagic, проведено детальний аналіз з сирцевим кодом Jsoup конкретних статей див. Jsoup - нотатки дослідженнь.
4.5.2 Xsoup
Xsoup заснований на Jsoup, розроблявся як XPath аналізатор.
Раніше для парсера WebMagic застосовувався HtmlCleaner, у якого є деякі проблеми під час використання. Основна його проблема полягає в точностях та помилках XPath - локалізації у сторінках якого не валідна структура коду, і це складно налаштувати.
Реалізований Xsoup більш відповідає до потреб пошукових сканерів. Також приємно відзначити - тестування показує продуктивність Xsoup перевищує HtmlCleaner більше, аніж у два рази.
Розробка Xsoup продовжується і досі, зараз підтримується загальний синтаксис для парсингу, що приведено у таблиці:
| Назва | Вираз | Підтримка |
| nodename | nodename | так |
| immediate parent | / | так |
| parent | // | так |
| attribute | [@key=value] | так |
| nth child | tag[n] | так |
| attribute | /@key | так |
| wildcard in tagname | /* | так |
| wildcard in attribute | /[@*] | так |
| function | function() | частково |
| or | a | b | так, починаючи з 0.2.0 |
| parent in path | . or .. | ні |
| predicates | price>35 | ні |
| predicates logic | @class=a or @class=b | так, починаючи з 0.2.0 |
Зазначте, що це умовні визначення - часні - лише для пошукоча і за для зручності використання функції XPath, проте ці функції не є стандартами XPath - зверніть на це увагу.
| Вираз | Опис | XPath1.0 |
|---|---|---|
| text(n) | текст безпосередньо n-го дочірнього вузола, якщо 0 - тоді для всіх | тільки text() |
| allText() | всі прямі і непрямі тексти дочірніх вузлів | не підтримує |
| tidyText() | всі прямі і непрямі тексти дочірніх вузлів, а також замінити деякі мітки обгорок, так, щоб відображався очищенний звичайний текст | не підтримує |
| html() | внутрішній HTML, HTML теги не вміщати в себе | не підтримує |
| outerHtml() | внутрішній HTML, вміщувати в тому числі тегі HTML у себе | не підтримує |
| regex(@attr,expr,group) | тут @attr і може бути вибраний з групи, за замовчуванням group0 | не підтримує |
4.5.3 Saxon
Saxon є потужним аналізатор XPath з підтримкою XPath 2.0 синтаксису. Webmagic-saxon інтеграція з Saxon є попередніми. Але тепер, схоже, синтакис XPath 2.0 є передовим, і здається, що його використовують у розробці не так багато пошукових сканерів.