From fcfa2c30c7aee8ebe24d01aa25727efbe33ed1f1 Mon Sep 17 00:00:00 2001 From: "yihua.huang" Date: Fri, 9 Aug 2013 20:36:27 +0800 Subject: [PATCH] complete docs --- .../webmagic/model/ModelPipeline.java | 3 ++- .../webmagic/model/annotation/ExtractBy.java | 25 ++++++++++++++++++- .../webmagic/model/annotation/ExtractBy2.java | 2 +- .../webmagic/model/annotation/ExtractBy3.java | 2 +- .../model/annotation/ExtractByRaw.java | 24 +++++++++++++++++- .../model/annotation/ExtractByUrl.java | 17 +++++++++++++ .../webmagic/model/annotation/HelpUrl.java | 10 ++++++++ .../webmagic/model/annotation/TargetUrl.java | 11 ++++++++ .../webmagic/pipeline/JsonFilePipeline.java | 2 +- .../webmagic/pipeline/PagedPipeline.java | 9 ++++--- 10 files changed, 96 insertions(+), 9 deletions(-) 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