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. Підтримується лише у правилах з регулярними виразами.

results matching ""

    No results matching ""