API - 使用数据仓库 - 基础篇
数据仓库是集成在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", "21"); //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", "21")); }
添加后即刻就可以在数据仓库管理器中看到数据项:
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 } }
在多个采集精灵中同时运行这个脚本, 可以并行工作, 只进不退的游标保证了每个采集精灵都不会重复劳动. 于是采集很快就完成了...
运行完成后的效果是: