使用webpasser爬虫框架对抓取解析后的数据持久化
2016-07-15 09:30
387 查看
摘要: 使用webpasser爬虫框架对抓取解析后的数据持久化
通过webpasser爬虫框架抓取以及解析后的数据是个map,将数据持久化的任务配置是
上述的com.hxt.webpasser.persistent.impl.DiskJsonHandleResult是个持久化的demo(将数据以json的形式保存到硬盘),rootDir和charSet是DiskJsonHandleResult类的两个属性,DiskJsonHandleResult类里rootDir表示将数据存到哪个目录。
自定义持久化类是继承com.hxt.webpasser.persistent.HandleResultMapInterface接口,将持久化操作写在handle方法。如
然后任务的配置中改为
建议另一个系统提供数据存储接口,爬虫系统将数据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的字符串。
当然,如果业务简单,需要数据库的持久化通用类,后面会增加。
通过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() { } }
当然,如果业务简单,需要数据库的持久化通用类,后面会增加。
相关文章推荐
- Redis教程(十):持久化详解
- Android持久化技术之文件的读取与写入实例详解
- Android仿QQ好友列表分组实现增删改及持久化
- Android持久化技术之SharedPreferences存储实例详解
- 轻量级java web实践-8(框架源码-6)
- 配置Tomcat将Session持久化到MySQL
- java关键字Transient
- 基于WebMagic爬虫定制的持久化模块(TXT)
- hibernate主键生成策略
- 持久化保存Parcelable实践
- Redis数据持久化方式
- hibernate基础知识总结2--持久化概念
- 使用JMS发布订阅topic,传送TextMe 4000 ssage
- 我理解的SharedPreferences
- redis持久化方式
- Java:基于ORM技术的配置文件持久化实现
- 多线程与双端队列结合使用,实现持久化任务(3)
- 【CoreData】 简单地使用
- iOS-数据持久化(一)
- Spring与数据库