Golddata如何采集须要登陆/会话的数据?

概要

本文将介绍使用GoldData半自动登陆功能,来采集须要登陆网站的数据。GoldData半自动登陆功能,就是指经过脚原本执行登陆,若是须要验证码或者其它内容须要人工输入时,能够经过收发邮件来执行登陆流程。javascript

下载例子

为了讲解方便,咱们以采集mydict的单词数据来说解采集须要登陆的网站数据。这个mydict例子程序能够从开源网站下载到( https://github.com/TheGoldData/mydict/releases ,或 https://gitee.com/golddata/mydict/attach_files )。html

下载以后,打开命令行,运行下面的命令就能够启动例子程序。java

java -jar mydict.war

启动以后,打开浏览器,输入网址http://localhost:8080/打开一个登陆页面。以下图所示:node

a mydict login example for golddata

输入用户名和密码(都是admin),就能够打开首页单词列表。git

编写登陆和检查会话脚本

点击“采集管理》网站管理”,点击“添加”按扭,添加名为mydict的站点。以下所示:github

golddata_site_add

接下来配制登陆和检查会话脚本,点击“设置半自动登陆”,会打开站点半自动登陆配制页面,以下图所示:ajax

golddata_auto_login_conf

登陆脚本以下:shell

//发送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

检查脚本以下:json

var ret=true;
if(html.contains("个人单词-登陆")){
ret=false
}
ret;

配制好以后,咱们回到网站管理页面,点击“启动登陆”,则会开始执行“自动登陆”,这以后,点击“查询”按扭来刷新页面,能够看到“等待输入”的状态。以下图所示:浏览器

golddata_wait_for_input

此时,您设置的通知邮箱,也应该同时收到了邮件。点开邮件,或者点击页面上的“录入等待输入”按扭,将会看到以下内容:
golddata_autologin_mailbox

golddata_autologin_dialog

依据邮件内容,回复邮件“{{qcxe}}”,就可让程序继续执行。在golddata页面里输入"qcxe",效果是同样的。程序将会回到“waitForInput()”,而且返回输入的内容。

回复以后,咱们将在golddata页面里,点击“查询”刷新页面,mydict的登陆状态会变为“已登陆”。以下图所示:

golddata_has_login

接下来,咱们能够定义抓取规则。

定义抓取规则

在添加规则以前,咱们还须要定义相似于表结构的数据集。以下图所示:

golddata_define_dataset

接下来,点击“采集管理》规则管理”,添加规则,打开添加规则页面,以下图所示:
golddata_define_rule

抓取规则脚本以下:

[
  {
    __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
      }
    }
  }
]

而后点击测试,将会进行测试抓取。咱们发现数据的确被抓取到了,以下图所示:
golddata_test_result

配制抓取器抓取

这和以前是同样的,将抓取器设置抓取站点“mydict”.而后点击开始抓取。而后会在数据管理里面查看抓取的数据。

结论

GoldData半自动登陆实质是提供了一个能够人工介入来异步获取会话的框架,既能够调用AI接口作到彻底自动登陆;也能够将相似于验证码须要复杂识别须要提供输入时,直接将cookie或者token信息经过邮件收发到GoldData平台(这样能够无论CAPTCHA多复杂 ),均可以让GoldData抓取数据的动做持续进行下去。

相关文章
相关标签/搜索