pull/17/head
yihua.huang 12 years ago
parent 8b15f3c63d
commit 1f86ce7720

@ -1,8 +1,10 @@
webmagic使用手册 webmagic使用手册
------ ------
>webmagic是一个开源的Java垂直爬虫框架目标是简化爬虫的开发流程让开发者专注于逻辑功能的开发。webmagic的核心非常简单但是覆盖爬虫的整个流程也是很好的学习爬虫开发的材料。作者曾经进行过一年的垂直爬虫的开发webmagic就是为了解决爬虫开发的一些重复劳动而产生的框架。 >webmagic是一个开源的Java垂直爬虫框架目标是简化爬虫的开发流程让开发者专注于逻辑功能的开发。webmagic的核心非常简单但是覆盖爬虫的整个流程也是很好的学习爬虫开发的材料。
>web爬虫是一种技术webmagic致力于将这种技术的实现成本降低但是出于对资源提供者的尊重webmagic不会做反封锁的事情包括验证码破解、代理切换、自动登录、抓取静态资源等。 >web爬虫是一种技术webmagic致力于将这种技术的实现成本降低但是出于对资源提供者的尊重webmagic不会做反封锁的事情包括验证码破解、代理切换、自动登录等。
>作者黄亿华([code4crafter@gmail.com](code4crafter@gmail.com))目前就职于大众点评曾经在前公司进行过一年的垂直爬虫的开发webmagic就是为了解决爬虫开发的一些重复劳动而产生的框架。
>webmagic的架构和设计参考了以下两个项目感谢以下两个项目的作者 >webmagic的架构和设计参考了以下两个项目感谢以下两个项目的作者
@ -63,7 +65,7 @@ webmagic还包含两个可用的扩展包因为这两个包都依赖了比较
### 不使用maven ### 不使用maven
不使用maven的用户可以下载这个二进制打包版本(感谢[oschina](http://www.oschina.net/)) 不使用maven的用户可以下载附带二进制jar包的版本(感谢[oschina](http://www.oschina.net/))
git clone http://git.oschina.net/flashsword20/webmagic-bin.git git clone http://git.oschina.net/flashsword20/webmagic-bin.git
@ -160,7 +162,6 @@ webmagic-core参考了scrapy的模块划分分为Spider(整个爬虫的调度
.pipeline(new FilePipeline()) .pipeline(new FilePipeline())
.thread(10).run(); .thread(10).run();
Spider的核心处理流程非常简单代码如下 Spider的核心处理流程非常简单代码如下
<!-- lang: java --> <!-- lang: java -->
@ -178,6 +179,8 @@ Spider的核心处理流程非常简单代码如下
sleep(site.getSleepTime()); sleep(site.getSleepTime());
} }
Spider还包括一个方法test(String url),该方法只抓取一个单独的页面,用于测试抽取效果。
#### PageProcessor(页面分析及链接抽取) #### PageProcessor(页面分析及链接抽取)
页面分析是垂直爬虫中需要定制的部分。在webmagic-core里通过实现**PageProcessor**接口来实现定制爬虫。PageProcessor有两个核心方法public void process(Page page)和public Site getSite() 。 页面分析是垂直爬虫中需要定制的部分。在webmagic-core里通过实现**PageProcessor**接口来实现定制爬虫。PageProcessor有两个核心方法public void process(Page page)和public Site getSite() 。
@ -352,7 +355,6 @@ webmagic-extension包括注解模块。为什么会有注解方式
AfterExtractor接口是对注解方式抽取能力不足的补充。实现AfterExtractor接口后会在**使用注解方式填充完字段后**调用**afterProcess()**方法,在这个方法中可以直接访问已抽取的字段、补充需要抽取的字段,甚至做一些简单的输出和持久化操作(并不是很建议这么做)。这部分可以参考[webmagic结合JFinal持久化到数据库的一段代码](http://www.oschina.net/code/snippet_190591_23456)。 AfterExtractor接口是对注解方式抽取能力不足的补充。实现AfterExtractor接口后会在**使用注解方式填充完字段后**调用**afterProcess()**方法,在这个方法中可以直接访问已抽取的字段、补充需要抽取的字段,甚至做一些简单的输出和持久化操作(并不是很建议这么做)。这部分可以参考[webmagic结合JFinal持久化到数据库的一段代码](http://www.oschina.net/code/snippet_190591_23456)。
* #### OOSpider * #### OOSpider
OOSpider是注解式爬虫的入口这里调用**create()**方法将OschinaBlog这个类加入到爬虫的抽取中这里是可以传入多个类的例如 OOSpider是注解式爬虫的入口这里调用**create()**方法将OschinaBlog这个类加入到爬虫的抽取中这里是可以传入多个类的例如
OOSpider.create( OOSpider.create(
@ -363,22 +365,17 @@ webmagic-extension包括注解模块。为什么会有注解方式
OOSpider会根据TargetUrl调用不同的Model进行解析。 OOSpider会根据TargetUrl调用不同的Model进行解析。
* #### PageModelPipeline * #### PageModelPipeline
可以通过定义PageModelPipeline来选择结果输出方式。这里new ConsolePageModelPipeline()是PageModelPipeline的一个实现会将结果输出到控制台。 可以通过定义PageModelPipeline来选择结果输出方式。这里new ConsolePageModelPipeline()是PageModelPipeline的一个实现会将结果输出到控制台。
PageModelPipeline还有一个实现**JsonFilePageModelPipeline**可以将对象持久化以JSON格式输出并持久化到文件。JsonFilePageModelPipeline默认使用对象的MD5值作为文件名你可以在Model中实现HasKey接口指定输出的文件名。
* #### 分页 * #### 分页
处理单项数据分页(例如单条新闻多个页面)是爬虫一个比较头疼的问题。webmagic目前对于分页的解决方案是在注解模式下Model通过实现**PagedModel**接口并引入PagedPipeline作为第一个Pipeline来实现。具体可以参考webmagic-samples中抓取网易新闻的代码**us.codecraft.webmagic.model.samples.News163**。 处理单项数据分页(例如单条新闻多个页面)是爬虫一个比较头疼的问题。webmagic目前对于分页的解决方案是在注解模式下Model通过实现**PagedModel**接口并引入PagedPipeline作为第一个Pipeline来实现。具体可以参考webmagic-samples中抓取网易新闻的代码**us.codecraft.webmagic.model.samples.News163**。
关于分页这里有一篇对于webmagic分页实现的详细说明的文章[关于爬虫实现分页的一些思考](http://my.oschina.net/flashsword/blog/150039)。 关于分页这里有一篇对于webmagic分页实现的详细说明的文章[关于爬虫实现分页的一些思考](http://my.oschina.net/flashsword/blog/150039)。
目前分页功能还没有分布式实现,如果使用RedisScheduler进行分布式爬取请不要使用分页功能。 目前分页功能还没有分布式实现,如果实现RedisScheduler进行分布式爬取请不要使用分页功能。
### 分布式 ### 分布式
webmagic-extension中通过redis来管理URL达到分布式的效果。但是对于分布式爬虫仅仅程序能够分布式运行还满足不了大规模抓取的需要webmagic可能后期会加入一些任务管理和监控的功能也欢迎各位用户为webmagic提交代码做出贡献。 webmagic-extension中通过redis来管理URL达到分布式的效果。但是对于分布式爬虫仅仅程序能够分布式运行还满足不了大规模抓取的需要webmagic可能后期会加入一些任务管理和监控的功能也欢迎各位用户为webmagic提交代码做出贡献。
### 更进一步
如果这篇文档仍然满足不了你的需要你可以阅读webmagic的[Javadoc](http://code4craft.github.io/webmagic/docs/),或者直接阅读源码[https://github.com/code4craft/webmagic](https://github.com/code4craft/webmagic)。

Loading…
Cancel
Save