Golddata如何采集需要登录/会话的数据?
Posted golddata
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golddata如何采集需要登录/会话的数据?相关的知识,希望对你有一定的参考价值。
概要
本文将介绍使用GoldData半自动登录功能,来采集需要登录网站的数据。GoldData半自动登录功能,就是指通过脚本来执行登录,如果需要验证码或者其它内容需要人工输入时,可以通过收发邮件来执行登录流程。
下载例子
为了讲解方便,我们以采集mydict的单词数据来讲解采集需要登录的网站数据。这个mydict例子程序可以从开源网站下载到( https://github.com/TheGoldData/mydict/releases ,或 https://gitee.com/golddata/mydict/attach_files )。
下载之后,打开命令行,运行下面的命令就可以启动例子程序。
java -jar mydict.war
启动之后,打开浏览器,输入网址http://localhost:8080/
打开一个登录页面。如下图所示:
输入用户名和密码(都是admin),就可以打开首页单词列表。
编写登录和检查会话脚本
点击“采集管理》网站管理”,点击“添加”按扭,添加名为mydict的站点。如下所示:
接下来配制登录和检查会话脚本,点击“设置半自动登录”,会打开站点半自动登录配制页面,如下图所示:
登录脚本如下:
//发送ajax请求验证码
var va=$ajax('http://localhost:8080/code/vcode?timestamp=1554001708730',{encoding:false});
var arg_={
label:site.name+"验证码",
type:1,
content:va.content
}
//waitForInput内置函数将发送邮件,并等待输入
//(回复邮件,或者goldData平台输入),
//并把输入内容当作验证码返回。
var code=waitForInput(arg_);
var data="username=admin&password=admin&vcode="+code
var m=new Map()
m.put('Cookie',va.cookie)
//发送ajax请求执行登录
var content=$ajax('http://localhost:8080/doLogin',{method:'POST',headers:m,data:data})
//如果正确,将返回状态1(登录成功),和headers信息给GoldData,
//否则返回0(登录失败)!
if(content.headers){
m.putAll(content.headers)
}
var ret={status:1,headers:m}
if(content.status!=200){
ret.status=0
}
ret
检查脚本如下:
var ret=true;
if(html.contains("我的单词-登录")){
ret=false
}
ret;
配制好之后,我们回到网站管理页面,点击“启动登录”,则会开始执行“自动登录”,这之后,点击“查询”按扭来刷新页面,可以看到“等待输入”的状态。如下图所示:
此时,您设置的通知邮箱,也应该同时收到了邮件。点开邮件,或者点击页面上的“录入等待输入”按扭,将会看到如下内容:
依据邮件内容,回复邮件“{{qcxe}}”,就可以让程序继续执行。在golddata页面里输入"qcxe",效果是一样的。程序将会回到“waitForInput()”,并且返回输入的内容。
回复之后,我们将在golddata页面里,点击“查询”刷新页面,mydict的登录状态会变为“已登录”。如下图所示:
接下来,我们可以定义抓取规则。
定义抓取规则
在添加规则之前,我们还需要定义类似于表结构的数据集。如下图所示:
接下来,点击“采集管理》规则管理”,添加规则,打开添加规则页面,如下图所示:
抓取规则脚本如下:
[
{
__sample: http://localhost:8080/word/index?pageNum=2
match0: http://localhost:8080/word/index(?pageNum=d+)?
fields0:
{
__model: true
__dataset: word
__node: "#content ul >li"
sn:
{
expr: ""
attr: ""
js: md5(item.name)
__label: ""
__showOnList: false
__type: ""
down: "0"
accessPathJs: ""
uploadConf: s1
}
name:
{
expr: h5
attr: ""
js: ""
__label: ""
__showOnList: true
__type: ""
down: "0"
accessPathJs: ""
uploadConf: s1
}
uk:
{
expr: li span.uk
attr: ""
js: source.replace("uk: ",'')
__label: ""
__showOnList: false
__type: ""
down: "0"
accessPathJs: ""
uploadConf: s1
}
us:
{
expr: li span.us
attr: ""
js: source.replace("us: ",'')
__label: ""
__showOnList: false
__type: ""
down: "0"
accessPathJs: ""
uploadConf: s1
}
}
fields1:
{
__node: .pagination a
href:
{
expr: a
attr: abs:href
js: ""
__label: ""
__showOnList: false
__type: ""
down: "0"
accessPathJs: ""
uploadConf: s1
}
}
}
]
然后点击测试,将会进行测试抓取。我们发现数据的确被抓取到了,如下图所示:
配制抓取器抓取
这和之前是一样的,将抓取器设置抓取站点“mydict”.然后点击开始抓取。然后会在数据管理里面查看抓取的数据。
结论
GoldData半自动登录实质是提供了一个可以人工介入来异步获取会话的框架,既可以调用AI接口做到完全自动登录;也可以将类似于验证码需要复杂识别需要提供输入时,直接将cookie或者token信息通过邮件收发到GoldData平台(这样可以不管CAPTCHA多复杂 ),都可以让GoldData抓取数据的动作持续进行下去。
以上是关于Golddata如何采集需要登录/会话的数据?的主要内容,如果未能解决你的问题,请参考以下文章