@@ -83,60 +83,41 @@ public String asString() {
8383 for (Extractor extractor : extractors ) {
8484 result = extractor .extract (result );
8585 }
86- List <Filter > filters = filtersMap .getOrDefault (DEFAULT_FIELD , Lists .newLinkedList ());
87- for (Filter filter : filters ) {
88- result = filter .process (result );
89- }
86+ result = filter (DEFAULT_FIELD , result );
9087 return result ;
9188 }
9289
9390 public Map <String , String > asMap () {
94- Map <String , String > map = Maps .newLinkedHashMap ();
95- for (Map .Entry <String , List <Extractor >> one : extractorsMap .entrySet ()) {
96- String name = one .getKey ();
97- List <Extractor > extractors = one .getValue ();
98- String result = html ;
99- for (Extractor extractor : extractors ) {
100- result = extractor .extract (result );
101- }
102- List <Filter > filters = filtersMap .getOrDefault (name , Lists .newLinkedList ());
103- for (Filter filter : filters ) {
104- result = filter .process (result );
105- }
106- try {
107- map .put (name , result );
108- } catch (Exception e ) {
109- LOGGER .error ("convert to map error! can't set '{}' with '{}'" , name , result , e );
110- }
111- }
112- return map ;
91+ return extractMap (html );
11392 }
11493
94+
11595 public List <Map <String , String >> asMapList () {
11696 Validate .notNull (htmlList , "must split first!" );
11797 List <Map <String , String >> mapList = Lists .newLinkedList ();
11898 for (String input : htmlList ) {
119- Map <String , String > map = Maps .newLinkedHashMap ();
120- for (Map .Entry <String , List <Extractor >> one : extractorsMap .entrySet ()) {
121- String name = one .getKey ();
122- List <Extractor > extractors = one .getValue ();
123- String result = input ;
124- for (Extractor extractor : extractors ) {
125- result = extractor .extract (result );
126- }
127- List <Filter > filters = filtersMap .getOrDefault (name , Lists .newLinkedList ());
128- for (Filter filter : filters ) {
129- result = filter .process (result );
130- }
131- map .put (name , result );
132- }
133- mapList .add (map );
99+ mapList .add (extractMap (input ));
134100 }
135101 return mapList ;
136102 }
137103
138104
139105 public <T > T asBean (Class <T > clazz ) {
106+ return extractBean (html , clazz );
107+ }
108+
109+ public <T > List <T > asBeanList (Class <T > clazz ) {
110+ Validate .notNull (htmlList , "must split first!" );
111+ List <T > entityList = Lists .newLinkedList ();
112+ for (String input : htmlList ) {
113+ entityList .add (extractBean (input , clazz ));
114+ }
115+ return entityList ;
116+ }
117+
118+ //------------ internal --------------//
119+
120+ private <T > T extractBean (String html , Class <T > clazz ) {
140121 T entity = Reflect .on (clazz ).create ().get ();
141122 for (Map .Entry <String , List <Extractor >> one : extractorsMap .entrySet ()) {
142123 String name = one .getKey ();
@@ -145,10 +126,7 @@ public <T> T asBean(Class<T> clazz) {
145126 for (Extractor extractor : extractors ) {
146127 result = extractor .extract (result );
147128 }
148- List <Filter > filters = filtersMap .getOrDefault (name , Lists .newLinkedList ());
149- for (Filter filter : filters ) {
150- result = filter .process (result );
151- }
129+ result = filter (name , result );
152130 try {
153131 Reflect .on (entity ).set (name , result );
154132 } catch (Exception e ) {
@@ -158,36 +136,41 @@ public <T> T asBean(Class<T> clazz) {
158136 return entity ;
159137 }
160138
161- public <T > T asBean (EntityExtractor <T > entityExtractor ) {
162- T entity = entityExtractor .extract (html );
163- return entity ;
139+ private Map <String , String > extractMap (String html ) {
140+ Map <String , String > map = Maps .newLinkedHashMap ();
141+ for (Map .Entry <String , List <Extractor >> one : extractorsMap .entrySet ()) {
142+ String name = one .getKey ();
143+ List <Extractor > extractors = one .getValue ();
144+ String result = html ;
145+ for (Extractor extractor : extractors ) {
146+ result = extractor .extract (result );
147+ }
148+ result = filter (name , result );
149+ try {
150+ map .put (name , result );
151+ } catch (Exception e ) {
152+ LOGGER .error ("convert to map error! can't set '{}' with '{}'" , name , result , e );
153+ }
154+ }
155+ return map ;
164156 }
165157
166- public <T > List <T > asBeanList (Class <T > clazz ) {
167- Validate .notNull (htmlList , "must split first!" );
168- List <T > entityList = Lists .newLinkedList ();
169- for (String input : htmlList ) {
170- T entity = Reflect .on (clazz ).create ().get ();
171- for (Map .Entry <String , List <Extractor >> one : extractorsMap .entrySet ()) {
172- String name = one .getKey ();
173- List <Extractor > extractors = one .getValue ();
174- String result = input ;
175- for (Extractor extractor : extractors ) {
176- result = extractor .extract (result );
177- }
178- List <Filter > filters = filtersMap .getOrDefault (name , Lists .newLinkedList ());
179- for (Filter filter : filters ) {
180- result = filter .process (result );
181- }
182- try {
183- Reflect .on (entity ).set (name , result );
184- } catch (Exception e ) {
185- LOGGER .error ("convert to bean error! can't set '{}' with '{}'" , name , result , e );
186- }
187- }
188- entityList .add (entity );
158+ private String filter (String name , String result ) {
159+ List <Filter > filters = filtersMap .getOrDefault (name , Lists .newLinkedList ());
160+ for (Filter filter : filters ) {
161+ result = filter .process (result );
189162 }
190- return entityList ;
163+ return result ;
164+ }
165+
166+ //------------ internal --------------//
167+
168+
169+ //------------ custom process --------------//
170+
171+ public <T > T asBean (EntityExtractor <T > entityExtractor ) {
172+ T entity = entityExtractor .extract (html );
173+ return entity ;
191174 }
192175
193176 public <T > List <T > asBeanList (EntityExtractor <T > entityExtractor ) {
@@ -203,6 +186,8 @@ public <T> List<T> asBeanList(EntityExtractor<T> entityExtractor) {
203186 public <T > List <T > asBeanList (EntityListExtractor <T > entityListExtractor ) {
204187 return entityListExtractor .extractList (html );
205188 }
189+ //------------ custom process --------------//
190+
206191
207192 public static Extractor selector (String query ) {
208193 return new SelectorExtractor (query );
0 commit comments