diff --git a/webmagic-extension/src/main/java/us/codecraft/webmagic/model/ModelPipeline.java b/webmagic-extension/src/main/java/us/codecraft/webmagic/model/ModelPipeline.java
index 84db4558..efb724e4 100644
--- a/webmagic-extension/src/main/java/us/codecraft/webmagic/model/ModelPipeline.java
+++ b/webmagic-extension/src/main/java/us/codecraft/webmagic/model/ModelPipeline.java
@@ -11,7 +11,8 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
- * 基于Pipeline的扩展点。
+ * 基于Pipeline的扩展点,用于实现注解格式的Pipeline。
+ * 与PageModelPipeline是一对多的关系(原谅作者没有更好的名字了)。
* @author code4crafter@gmail.com
* @date: 13-8-2
* Time: 上午10:47
diff --git a/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractBy.java b/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractBy.java
index bcd57064..168387bc 100644
--- a/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractBy.java
+++ b/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractBy.java
@@ -6,22 +6,45 @@ import java.lang.annotation.Target;
/**
* 定义类或者字段的抽取规则。
+ *
* @author code4crafter@gmail.com
* @date: 13-8-1
* Time: 下午8:40
*/
@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
-@Target({ElementType.FIELD,ElementType.TYPE})
+@Target({ElementType.FIELD, ElementType.TYPE})
public @interface ExtractBy {
+ /**
+ * 抽取规则
+ *
+ * @return 抽取规则
+ */
String value();
public enum Type {XPath, Regex, Css}
+ /**
+ * 抽取规则类型,支持XPath、Css selector、正则表达式,默认是XPath
+ *
+ * @return 抽取规则类型
+ */
Type type() default Type.XPath;
+ /**
+ * 是否是不能为空的关键字段,若notNull为true,则对应字段抽取不到时,丢弃整个类,默认为false
+ *
+ * @return 是否是不能为空的关键字段
+ */
boolean notNull() default false;
+ /**
+ * 是否抽取多个结果
+ * 用于字段时,需要List来盛放结果
+ * 用于类时,表示单页抽取多个对象
+ *
+ * @return 是否抽取多个结果
+ */
boolean multi() default false;
}
diff --git a/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractBy2.java b/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractBy2.java
index ad720b3a..99ebd763 100644
--- a/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractBy2.java
+++ b/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractBy2.java
@@ -5,7 +5,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.Target;
/**
- * 定义类或者字段的抽取规则。
+ * 定义类或者字段的抽取规则,只能在Extract、ExtractByRaw之后使用。
*
* @author code4crafter@gmail.com
* @date: 13-8-1
diff --git a/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractBy3.java b/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractBy3.java
index 023360ef..77910f81 100644
--- a/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractBy3.java
+++ b/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractBy3.java
@@ -5,7 +5,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.Target;
/**
- * 定义类或者字段的抽取规则。
+ * 定义类或者字段的抽取规则,只能在Extract、ExtractByRaw之后使用。
* @author code4crafter@gmail.com
* @date: 13-8-1
* Time: 下午8:40
diff --git a/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractByRaw.java b/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractByRaw.java
index f774d3e9..caa87de0 100644
--- a/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractByRaw.java
+++ b/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractByRaw.java
@@ -6,22 +6,44 @@ import java.lang.annotation.Target;
/**
* 对于在Class级别就使用过ExtractBy的类,在字段中想抽取全部内容可使用此方法。
+ *
* @author code4crafter@gmail.com
* @date: 13-8-1
* Time: 下午8:40
*/
@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
-@Target({ElementType.FIELD,ElementType.TYPE})
+@Target({ElementType.FIELD, ElementType.TYPE})
public @interface ExtractByRaw {
+ /**
+ * 抽取规则
+ *
+ * @return 抽取规则
+ */
String value();
public enum Type {XPath, Regex, Css}
+ /**
+ * 抽取规则类型,支持XPath、Css selector、正则表达式,默认是XPath
+ *
+ * @return 抽取规则类型
+ */
Type type() default Type.XPath;
+ /**
+ * 是否是不能为空的关键字段,若notNull为true,则对应字段抽取不到时,丢弃整个类,默认为false
+ *
+ * @return 是否是不能为空的关键字段
+ */
boolean notNull() default false;
+ /**
+ * 是否抽取多个结果
+ * 需要List来盛放结果
+ *
+ * @return 是否抽取多个结果
+ */
boolean multi() default false;
}
diff --git a/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractByUrl.java b/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractByUrl.java
index d57ec6eb..401e4694 100644
--- a/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractByUrl.java
+++ b/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/ExtractByUrl.java
@@ -14,10 +14,27 @@ import java.lang.annotation.Target;
@Target({ElementType.FIELD})
public @interface ExtractByUrl{
+ /**
+ * 抽取规则,支持正则表达式
+ *
+ * @return 抽取规则
+ */
String value() default "";
+ /**
+ * 是否是不能为空的关键字段,若notNull为true,则对应字段抽取不到时,丢弃整个类,默认为false
+ *
+ * @return 是否是不能为空的关键字段
+ */
boolean notNull() default false;
+ /**
+ * 是否抽取多个结果
+ * 用于字段时,需要List来盛放结果
+ * 用于类时,表示单页抽取多个对象
+ *
+ * @return 是否抽取多个结果
+ */
boolean multi() default false;
}
diff --git a/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/HelpUrl.java b/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/HelpUrl.java
index 3437e444..0b2a2ec8 100644
--- a/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/HelpUrl.java
+++ b/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/HelpUrl.java
@@ -14,7 +14,17 @@ import java.lang.annotation.Target;
@Target({ElementType.TYPE})
public @interface HelpUrl {
+ /**
+ * 某个类对应的URL规则列表
+ * webmagic对正则表达式进行了修改,"."仅表示字符"."而不代表任意字符,而"\*"则代表了".\*",例如"http://\*.oschina.net/\*"代表了oschina所有的二级域名下的URL。
+ *
+ * @return 抽取规则
+ */
String[] value();
+ /**
+ * 指定提取URL的区域(仅支持XPath)
+ * @return 指定提取URL的区域
+ */
String sourceRegion() default "";
}
diff --git a/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/TargetUrl.java b/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/TargetUrl.java
index c747da6c..0caf190c 100644
--- a/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/TargetUrl.java
+++ b/webmagic-extension/src/main/java/us/codecraft/webmagic/model/annotation/TargetUrl.java
@@ -6,6 +6,7 @@ import java.lang.annotation.Target;
/**
* 定义某个类抽取的范围和来源,sourceRegion可以用xpath语法限定抽取区域。
+ *
* @author code4crafter@gmail.com
* @date: 13-8-1
* Time: 下午8:40
@@ -14,8 +15,18 @@ import java.lang.annotation.Target;
@Target({ElementType.TYPE})
public @interface TargetUrl {
+ /**
+ * 某个类对应的URL规则列表
+ * webmagic对正则表达式进行了修改,"."仅表示字符"."而不代表任意字符,而"\*"则代表了".\*",例如"http://\*.oschina.net/\*"代表了oschina所有的二级域名下的URL。
+ *
+ * @return 抽取规则
+ */
String[] value();
+ /**
+ * 指定提取URL的区域(仅支持XPath)
+ * @return 指定提取URL的区域
+ */
String sourceRegion() default "";
}
diff --git a/webmagic-extension/src/main/java/us/codecraft/webmagic/pipeline/JsonFilePipeline.java b/webmagic-extension/src/main/java/us/codecraft/webmagic/pipeline/JsonFilePipeline.java
index dbe1a00a..53dba9e4 100644
--- a/webmagic-extension/src/main/java/us/codecraft/webmagic/pipeline/JsonFilePipeline.java
+++ b/webmagic-extension/src/main/java/us/codecraft/webmagic/pipeline/JsonFilePipeline.java
@@ -12,7 +12,7 @@ import java.io.IOException;
import java.io.PrintWriter;
/**
- * 持久化到文件的接口。
+ * JSON格式持久化到文件的接口。
*
* @author code4crafter@gmail.com
* Date: 13-4-21
diff --git a/webmagic-extension/src/main/java/us/codecraft/webmagic/pipeline/PagedPipeline.java b/webmagic-extension/src/main/java/us/codecraft/webmagic/pipeline/PagedPipeline.java
index b692da27..17538424 100644
--- a/webmagic-extension/src/main/java/us/codecraft/webmagic/pipeline/PagedPipeline.java
+++ b/webmagic-extension/src/main/java/us/codecraft/webmagic/pipeline/PagedPipeline.java
@@ -9,6 +9,9 @@ import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
+ * 用于实现分页的Pipeline。
+ * 在使用redis做分布式爬虫时,请不要使用此功能。
+ *
* @author code4crafter@gmail.com
* @date: 13-8-4
* Time: 下午5:15
@@ -34,7 +37,7 @@ public class PagedPipeline implements Pipeline {
if (o instanceof PagedModel) {
PagedModel pagedModel = (PagedModel) o;
pageMap.put(pagedModel.getPageKey(), pagedModel.getPage(), Boolean.TRUE);
- if (pagedModel.getOtherPages()!=null){
+ if (pagedModel.getOtherPages() != null) {
for (String otherPage : pagedModel.getOtherPages()) {
Boolean aBoolean = pageMap.get(pagedModel.getPageKey(), otherPage);
if (aBoolean == null) {
@@ -70,8 +73,8 @@ public class PagedPipeline implements Pipeline {
}
});
PagedModel value = entryList.get(0).getValue();
- for (int i=1;i