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
є передовим, і здається, що його використовують у розробці не так багато пошукових сканерів.