5.3 @ExtractBy
Анотація @ExtractBy
описує правила екстракції для вилучення елементів.
5.3.1 Знайомство з анотацією ExtractBy
Анотація @ExtractBy є ключовою для поля і означає - використовуй вказане правило екстракції, а результат екстракції завантажуй в поле під анотацію. Наприклад:
@ExtractBy("//div[@id='readme']/text()")
private String readme;
Де "//div[@id='readme']/text()" - це правило екстракції представлене у форматі XPath, а в результаті його виконання екстрактовані дані зберігаються у поле readme типу строка String.
5.3.2 Інші правила екстракції
На додаток крім XPath модна використовувати інші формати - CSS селектори, регулярні вирази та JsonPath, що доповнюється параметром анотації включенням типу type
.
@ExtractBy(value = "div.BlogContent", type = ExtractBy.Type.Css)
private String content;
5.3.3 notNull
@ExtractBy може позначатися також властивістю notNull
, якщо ви знайомі з MySql то ви розумієте, що мається на увазі: це поле має бути не пустим. Якщо пусте - то результат екстракції викидається. Для критичних / принципових атрибутів (таких як заголовок статті, та інше) деякої сторінки, при встановленні notNull
як true
, ефективно відсіюються не важливі сторінки.
Зверніть увагу!
notNull
дефолтно є true
.
5.3.4 Multi
(deprecated) (застаріле)
Multi
атрибут типу булінь, що відокремлював правила екстракції для поля з кількома записами від одиничного запису. Для цього використовувався тип java.util.List
. Починаючи з версії 0.4.3 при умові - цільове полі має тип List - вмикається автоматично на true
, тому вподальшому не актуально і більше не потрібно налаштовувати.
до версії 0.4.3
@ExtractBy(value = "//div[@class='BlogTags']/a/text()", multi = true) private List<String> tags;
0.4.3 та пізніше
@ExtractBy("//div[@class='BlogTags']/a/text()") private List<String> tags;
5.3.5 ComboExtract (deprecated) (застаріле)
@ComboExtract
для складних записів, що можуть комбінуватися різними правилами збору, включаючи логічні "AND/OR" ("і/або").
WebMagic з версії 0.4.3 використовує XSoup версії 0.2.0. У цій версії, значно покращено підтримку синтаксису XPath, та підтримує не тільки XPath і регулярні вирази, які використовуються в поєднанні, а також підтримує "|" ("або"). Тому автор вважає, ComboExtract
це складне поєднання, більше не потрібні.
XPath комбінується з регулярними виразами
@ExtractBy("//div[@class='BlogStat']/regex('\\d+-\\d+-\\d+\\s+\\d+:\\d+')") private Date date;
XPath чи take
@ExtractBy("//div[@id='title']/text() | //title/text()") private String title;
5.3.6 ExtractByUrl
@ExtractByUrl
окрема анотація, що означає - буде екстрактовано з URL. Підтримується лише у правилах з регулярними виразами.