数据仓库是集成在Spider Studio中的一个重要功能, 利用它可以非常方便的保存采集到的数据, 然后导出或者在其他脚本中再利用.

数据仓库的全部功能都集成在DataManager这个静态类里面, 基本用法如下:

1. DataManager.New

void New(string datasetName)

调用此方法会创建一个名为datasetName的数据集, 注意这里datasetName是不区分大小写的. 创建的同时该数据集会自动显示在数据仓库管理器界面中, 如:

public void Run()
{
DataManager.New("test_data");
}

运行此代码会生成"TEST_DATA"数据集并显示在界面中:

2. DataManager.Count

int Count(string datasetName)

调用此方法可以获得指定数据集的大小.

3. DataManager.AppendData

void AppendData(string datasetName, DataEntry entry)

调用此方法可以向指定数据集中添加数据.

3.1 DataEntry是数据项的类型.

简单来说是一个Key-Value的集合, 注意Key和Value都必须是string类型. 下面举几个例子说明用法:

var de = DataEntry.Create().Set("Name", "张三").Set("Age", ""); //Name = 张三, Age = 21
var name = de.Get("Name");
var age = de.Get("Age");

3.2 向指定数据集添加数据项的例子:

public void Run()
{
DataManager.AppendData("test_data", DataEntry.Create().Set("Name", "张三").Set("Age", ""));
}

添加后即刻就可以在数据仓库管理器中看到数据项:

4. DataManager.GetData

List<DataEntry> GetData(string datasetName, int index, int length)

获取指定范围的数据项. 如果需要批量读取数据内容, 就应该使用这个方法.

5. DataManager.ReadData

DataEntry ReadData(string datasetName)

读取指定数据集游标位置的数据项. 这里可以理解为一个只进不退的游标, 每读取一次, 游标就向前进一步, 直到数据集末尾为止.

此方法很适合用于开发需要并行抓取的脚本. 比如下面的例子:

从数据集URLS中获取url, 然后打开页面, 获取指定元素的Text, 并保存到CONTENTS数据集中.

URLS中有3000个链接:

脚本如下:

public void Run()
{
while(Default.Available)
{
var de = DataManager.ReadData("URLS"); //读取URLS当前位置的DataEntry
Default.Navigate(de.Get("Url"));
Default.Ready();
var node = Default.SelectSingleNode(...);
DataManager.AppendData("CONTENTS", de.Set("Text", node.Text())); //在de中添加新的字段"Text"然后保存到CONTENTS
}
}

在多个采集精灵中同时运行这个脚本, 可以并行工作, 只进不退的游标保证了每个采集精灵都不会重复劳动. 于是采集很快就完成了...

运行完成后的效果是:

最新文章

  1. WebAPi之SelfHost自创建证书启动Https疑难解惑及无法正确返回结果
  2. HTTP Status 500 - The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
  3. 【小白的CFD之旅】11 敲门实例【续】
  4. js创建标签的方法--依赖于jquery
  5. jQuery还原select下拉列表和清空input的值,回显下拉列表框的值
  6. Jmeter组件1. CSV Data Set Config
  7. 一步一步写平衡二叉树(AVL树)
  8. Selenium2+python自动化3-解决pip使用异常
  9. Mixing Delphi and C++(相互调用)
  10. [SAP ABAP开发技术总结]ABAP读写、解析XML文件
  11. mvn使用问题
  12. python 装饰器和 functools 模块
  13. js中关于prototype学习(2015年1月5号晚)
  14. python学习笔记24(路径与文件 (os.path包, glob包))
  15. flex dispatchEvent 实例
  16. 异常处理:你不可能总是对的 - 零基础入门学习Python032
  17. WPF下YUV播放的D3D解决方案
  18. 赵本山 教你如何在实战项目中使用WCF
  19. Xamarin.Forms 开发资源集合(复制)
  20. LeetCode算法题-Diameter of Binary Tree(Java实现)

热门文章

  1. Tensorflow 深度学习简介(自用)
  2. tcp/ip协议中的SYN, ACK的数值变化
  3. Python-urllib学习记录
  4. Python网络爬虫 - 1. 准备工作
  5. tableview的两个重用cell方法
  6. Mac下终端显示多彩化
  7. JDK1.5 AtomicLong实例
  8. codechef The Ball And Cups题解
  9. windows设置文件夹显示缩略图
  10. dojo 五 配置dojoconfig