文档章节

使用webpasser爬虫框架对抓取解析后的数据持久化

hxt168
 hxt168
发布于 2016/07/14 15:29
字数 524
阅读 59
收藏 0

    通过webpasser爬虫框架抓取以及解析后的数据是个map,将数据持久化的任务配置是

	 <!-- 抓取解析后的数据持久化 -->
	  <resultHandler target="handleResultMapInterface" classPath="com.hxt.webpasser.persistent.impl.DiskJsonHandleResult">
	 			<property name="rootDir" value="downdir/path/test" ></property>
	 			<property name="charSet" value="utf-8" ></property>
	 </resultHandler>

    上述的com.hxt.webpasser.persistent.impl.DiskJsonHandleResult是个持久化的demo(将数据以json的形式保存到硬盘),rootDir和charSet是DiskJsonHandleResult类的两个属性,DiskJsonHandleResult类里rootDir表示将数据存到哪个目录。

    自定义持久化类是继承com.hxt.webpasser.persistent.HandleResultMapInterface接口,将持久化操作写在handle方法。如

public class HandleResultServcieDemo implements HandleResultMapInterface{

	private String taskName;
	
	public HandleResultServcieDemo(String taskName){
		this.taskName= taskName;
	}
	
	public void handle(Map<String, Object> resultMap) {

		System.out.println("taskName:"+taskName+",data:"+JsonUtil.toJSONString(resultMap));
		//持久化具体操作
        //如存入mysql,oracle,或push到其他接口
		
	}

	public void close() {
		
	}

}

然后任务的配置中改为

	 <!-- 抓取解析后的数据持久化 -->
	  <resultHandler target="handleResultMapInterface" classPath="com.hxt.webpasser.persistent.impl.HandleResultServcieDemo">
	 			<!-- 	构造器注入,其中taskName是内置变量 -->
	 		 <constructor >
	 		      <arg ref="taskName" ></arg>
	 		</constructor>
	 </resultHandler>

    建议另一个系统提供数据存储接口,爬虫系统将数据push到那个接口中。这样爬虫系统不用引用各种数据库驱动包,降低业务处理关联。此种持久化类例子如webpasser.project下的VideoPushServcieImpl(http://git.oschina.net/passer/webpasser/blob/master/webpasser.project/src/main/java/com/hxt/webpasser/persistent/impl/VideoPushServcieImpl.java)。另一系统需要提供http://xxx/xx?json=xxx的形式的http接口,存储成功则返回包含有success的字符串。

/**
 * 将数据push到其他系统的接口
 * 
 */
public class VideoPushServcieImpl implements HandleResultMapInterface{

	private String pushUrl;
	private HttpClientWrapper httpClientWrapper;
	
	public VideoPushServcieImpl(String taskName){
		//读取config.properties
		URL path = VideoPushServcieImpl.class.getClassLoader().getResource(
				"config.properties");
		Properties properties = new Properties();
		try {
			properties.load(ResourceUtil.getResourceStream("/config.properties"));
		} catch (IOException e) {
			e.printStackTrace();
		}

		pushUrl=properties.getProperty("pushUrl");
		httpClientWrapper=new HttpClientWrapper();
		httpClientWrapper.setCharset("utf-8");
		

	}
	
	public void handle(Map<String, Object> resultMap) {

		Map<String, String> paramMap=new HashMap<String, String>();
		String json=JsonUtil.toJSONString(resultMap);
		paramMap.put("json", json);
		boolean isFail=true;
		try {
			String con=httpClientWrapper.post(pushUrl, paramMap);
			if(con.indexOf("success")>-1){
				isFail=false;
			}
		} catch (Exception e) {
			e.printStackTrace();
			isFail=true;
		}
		if(isFail){
			//写入日志
		}
	}
	public void close() {

	}

}

       当然,如果业务简单,需要数据库的持久化通用类,后面会增加。

 

 

© 著作权归作者所有

共有 人打赏支持
hxt168

hxt168

粉丝 8
博文 19
码字总数 16858
作品 3
杭州
程序员
私信 提问
加载中

评论(1)

机智的小安
机智的小安
谢谢博主。。。
采集一个简单的页面,我配置的分页一直不对,只能采集第一页

以下是我配置的XML文件: Mozilla/5.0 (compatible; webpasser;) ../ @hxt168

机智的小安
2016/07/15
308
3
开源爬虫框架--WebPasser

WebPasser是一款可配置的开源爬虫框架,提供爬虫控制台管理界面,通过配置解析各类网页内容,无需写一句java代码即可抽取所需数据。 1.包含强大的页面解析引擎,提供jsoup、xpath、正则表达式...

hxt168
2016/06/08
2.8K
0
webmagic的设计机制及原理-如何开发一个Java爬虫

此文章是webmagic 0.1.0版的设计手册,后续版本的入门及用户手册请看这里:https://github.com/code4craft/webmagic/blob/master/user-manual.md 之前就有网友在博客里留言,觉得webmagic的实...

黄亿华
2013/07/20
0
94
scrapy组件及执行流程

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的...

有余力则学文
2018/01/29
0
0
Python爬虫之Scrapy框架解读

Scrapy解释 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中。 其最初是为了页面抓取 (更确切来说, 网络抓...

楠木楠
2016/09/23
74
0

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-13(Mybatis基本概念和简单的例子)

在mybatis初次学习Mybatis的时候,遇到了很多问题,虽然阿里云的视频有教学,但是视频教学所使用的软件和我自己使用的软件不用,我自己用的数据库是oracle数据库,开发环境是idea。而且视频中...

白话
今天
3
0
Java基础:String、StringBuffer和StringBuilder的区别

1 String String:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的。 String类的包含如下定义: /** The value is used for character storage. */private final cha...

watermelon11
今天
2
0
mogodb服务

部署MongoDB 官网: https://www.mongodb.com/download-center/community 创建mongo数据目录 mkdir /data/mongodb 二进制部署 wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x8......

以谁为师
昨天
5
0
大神教你Debian GNU/Linux 9.7 “Stretch” Live和安装镜像开放下载

Debian项目团队于昨天发布了Debian GNU/Linux 9 "Stretch" 的第7个维护版本更新,重点修复了APT软件管理器中存在的安全漏洞。在敦促每位用户尽快升级系统的同时,Debian团队还发布了Debian ...

linux-tao
昨天
4
0
PHP 相关配置

1. php-fpm的pool 编辑php-fpm配置文件php-fpm.con vim /usr/local/php/etc/php-fpm.conf //在[global]部分增加以下内容 include = etc/php-fpm.d/*.conf # 相当与Nginx的虚拟主机文件 “vho......

Yue_Chen
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部