GoldData仿真采集脚本框架,支持浏览器和移动APP采集,是专为采集而设计的。是集驱动访问、流程控制、选择器、UI交互、代理与MITM、数据集、关键词存储为一体并极力简化代码量的框架。且我们的代理与MITM工具提供拦截http(s),socks协议,可以完成市面99.9%的网站和手机App采集。
第一、我们对代码做了大量的语法糖。比如我们将webdriver以及Appium中的选择器,变成JQuery式的链式调用。如:
//打开IE浏览器
__.IE()
//打开Chrome浏览器
__.chrome()
//打开安桌指定App
__.android('com.example.news','.Activity')
//抽取内容
var ret=$id("article").css("table").html()
//或者
ret=$xpath("//table/tr").css("td.single").html()
//或者
$css("table").css("tr").name("btn").click()
第二、我们创建了采集流程框架。因为使用仿真抓取,我们需要在一次打开的浏览器中,也就是一个会话里采集数据,并且可以接续上一次采集,并且能够随时暂停、停止、并能提供输入介入,如果遇到异常还能退回合理的地方。最重要的是提供了一个层次分明的代码,可以便于阅读、修改和增强脚本。
Gold({
main:function(){
__.chrome();
},
list:function(){
var kw=$kw('region')
var str=null
while((str=kw.next())){
//创建浏览器新标签页,并将驱动自动切换到该标签页
__switch.newWindow('http://www.example.com/page/'+kw)
var ret=forward('page'))
if(ret){
//...
}
kw.submit(str)
//关闭当前标签页
__switch.close();
}
},
page:function(){
var item={}
item.name=$css('#name').text()
if(!item.name){
backward('list')
return;
}
item.sn=md5(name)
$dataset('shop').add(item)
}
})
第三、我们添加和集成了代理和MITM工具,并且努力让其支持http(s)协议外,还添加了对socks协议支持。让这些协议都可以做到修改请求与响应功能。 这大大增强了采集能力与速度。
//获取代理表里的地址
var proxydb=__proxy.db('cate1')
//创建代理
__proxy.createServer(true,proxydb.last().url).start(0);
//添加拦截器,比如将不需要请求的内容去掉。
__proxy.addFilter(<client2Proxy>,<proxy2Server>,<server2proxy>,<proxy2client>)
//创建启动带有代理的Google Chrome浏览器
__.chrome(__proxy.get())
第四、我们添加了关键词、数据集、访问与存储功能,以及waitForInput等等内容,让采集人员可以专注采集业务,而无需关注存储。
//访问关键词
$kw("city").add('New York')
//访问数据集
$dataset('area').add({sn:md5(url),name:'New York'});
第五,我们可以联机测试,边写代码边进行测试,极大提高编写脚本的效率。
第六、还可结合GoldData平台,提供定时调度,分布式采集、以及数据融合功能,将数据与数据关系一步到位采集和融合到你的数据应用表中。