View Javadoc
1   package us.codecraft.webmagic.selector;
2   
3   import org.jsoup.Jsoup;
4   import org.jsoup.nodes.Document;
5   import org.jsoup.nodes.Element;
6   import us.codecraft.webmagic.utils.BaseSelectorUtils;
7   
8   import java.util.ArrayList;
9   import java.util.List;
10  
11  /**
12   * @author code4crafter@gmail.com
13   * @since 0.3.0
14   */
15  public abstract class BaseElementSelector implements Selector, ElementSelector {
16      private Document parse(String text) {
17          // Jsoup could not parse <tr></tr> or <td></td> tag directly
18          // https://stackoverflow.com/questions/63607740/jsoup-couldnt-parse-tr-tag
19          text = BaseSelectorUtils.preParse(text);
20          return Jsoup.parse(text);
21      }
22  
23      @Override
24      public String select(String text) {
25          if (text != null) {
26              return select(parse(text));
27          }
28          return null;
29      }
30  
31      @Override
32      public List<String> selectList(String text) {
33          if (text != null) {
34              return selectList(parse(text));
35          } else {
36              return new ArrayList<String>();
37          }
38      }
39  
40      public Element selectElement(String text) {
41          if (text != null) {
42              return selectElement(parse(text));
43          }
44          return null;
45      }
46  
47      public List<Element> selectElements(String text) {
48          if (text != null) {
49              return selectElements(parse(text));
50          } else {
51              return new ArrayList<Element>();
52          }
53      }
54  
55      public abstract Element selectElement(Element element);
56  
57      public abstract List<Element> selectElements(Element element);
58  
59      public abstract boolean hasAttribute();
60  
61  }