1 package us.codecraft.webmagic.model;
2
3 import us.codecraft.webmagic.Site;
4 import us.codecraft.webmagic.Spider;
5 import us.codecraft.webmagic.pipeline.CollectorPipeline;
6 import us.codecraft.webmagic.pipeline.PageModelPipeline;
7 import us.codecraft.webmagic.processor.PageProcessor;
8
9 import java.util.ArrayList;
10 import java.util.List;
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 public class OOSpider<T> extends Spider {
42
43 private ModelPageProcessor modelPageProcessor;
44
45 private ModelPipeline modelPipeline;
46
47 private PageModelPipeline pageModelPipeline;
48
49 private List<Class> pageModelClasses = new ArrayList<Class>();
50
51 protected OOSpider(ModelPageProcessor modelPageProcessor) {
52 super(modelPageProcessor);
53 this.modelPageProcessor = modelPageProcessor;
54 }
55
56 public OOSpider(PageProcessor pageProcessor) {
57 super(pageProcessor);
58 }
59
60
61
62
63
64
65
66
67 public OOSpider(Site site, PageModelPipeline pageModelPipeline, Class... pageModels) {
68 this(ModelPageProcessor.create(site, pageModels));
69 this.modelPipeline = new ModelPipeline();
70 super.addPipeline(modelPipeline);
71 for (Class pageModel : pageModels) {
72 if (pageModelPipeline != null) {
73 this.modelPipeline.put(pageModel, pageModelPipeline);
74 }
75 pageModelClasses.add(pageModel);
76 }
77 }
78
79 @Override
80 protected CollectorPipeline getCollectorPipeline() {
81 return new PageModelCollectorPipeline<T>(pageModelClasses.get(0));
82 }
83
84 public static OOSpider create(Site site, Class... pageModels) {
85 return new OOSpider(site, null, pageModels);
86 }
87
88 public static OOSpider create(Site site, PageModelPipeline pageModelPipeline, Class... pageModels) {
89 return new OOSpider(site, pageModelPipeline, pageModels);
90 }
91
92 public OOSpider addPageModel(PageModelPipeline pageModelPipeline, Class... pageModels) {
93 for (Class pageModel : pageModels) {
94 modelPageProcessor.addPageModel(pageModel);
95 modelPipeline.put(pageModel, pageModelPipeline);
96 }
97 return this;
98 }
99
100 public OOSpider setIsExtractLinks(boolean isExtractLinks){
101 modelPageProcessor.setExtractLinks(isExtractLinks);
102 return this;
103 }
104
105 }