概要
本文將介紹使用GoldData半自動登錄功能寿烟,來采集需要登錄網(wǎng)站的數(shù)據(jù)。GoldData半自動登錄功能艾杏,就是指通過腳本來執(zhí)行登錄韧衣,如果需要驗證碼或者其它內(nèi)容需要人工輸入時盅藻,可以通過收發(fā)郵件來執(zhí)行登錄流程购桑。
下載例子
為了講解方便,我們以采集mydict的單詞數(shù)據(jù)來講解采集需要登錄的網(wǎng)站數(shù)據(jù)氏淑。這個mydict例子程序可以從開源網(wǎng)站下載到(?https://github.com/TheGoldData/mydict/releases?勃蜘,或?https://gitee.com/golddata/mydict/attach_files?)。
下載之后假残,打開命令行缭贡,運行下面的命令就可以啟動例子程序炉擅。
java -jar mydict.war
啟動之后,打開瀏覽器阳惹,輸入網(wǎng)址http://localhost:8080/打開一個登錄頁面谍失。如下圖所示:
輸入用戶名和密碼(都是admin),就可以打開首頁單詞列表莹汤。
編寫登錄和檢查會話腳本
點擊“采集管理》網(wǎng)站管理”快鱼,點擊“添加”按扭,添加名為mydict的站點纲岭。如下所示:
接下來配制登錄和檢查會話腳本抹竹,點擊“設(shè)置半自動登錄”,會打開站點半自動登錄配制頁面止潮,如下圖所示:
登錄腳本如下:
//發(fā)送ajax請求驗證碼
var va=$ajax('http://localhost:8080/code/vcode?timestamp=1554001708730',{encoding:false});
var arg_={
label:site.name+"驗證碼",
type:1,
content:va.content
}
//waitForInput內(nèi)置函數(shù)將發(fā)送郵件窃判,并等待輸入
//(回復(fù)郵件,或者goldData平臺輸入)喇闸,
//并把輸入內(nèi)容當(dāng)作驗證碼返回袄琳。
var code=waitForInput(arg_);
var data="username=admin&password=admin&vcode="+code
var m=new? Map()
m.put('Cookie',va.cookie)
//發(fā)送ajax請求執(zhí)行登錄
var content=$ajax('http://localhost:8080/doLogin',{method:'POST',headers:m,data:data})
//如果正確,將返回狀態(tài)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
檢查腳本如下:
```javascript
var ret=true;
if(html.contains("我的單詞-登錄")){
ret=false
}
ret;
配制好之后窗轩,我們回到網(wǎng)站管理頁面,點擊“啟動登錄”座咆,則會開始執(zhí)行“自動登錄”痢艺,這之后,點擊“查詢”按扭來刷新頁面介陶,可以看到“等待輸入”的狀態(tài)堤舒。如下圖所示:
此時,您設(shè)置的通知郵箱哺呜,也應(yīng)該同時收到了郵件舌缤。點開郵件,或者點擊頁面上的“錄入等待輸入”按扭某残,將會看到如下內(nèi)容:?
依據(jù)郵件內(nèi)容国撵,回復(fù)郵件“{{qcxe}}”,就可以讓程序繼續(xù)執(zhí)行。在golddata頁面里輸入"qcxe",效果是一樣的玻墅。程序?qū)氐健皐aitForInput()”介牙,并且返回輸入的內(nèi)容。
回復(fù)之后澳厢,我們將在golddata頁面里环础,點擊“查詢”刷新頁面囚似,mydict的登錄狀態(tài)會變?yōu)椤耙训卿洝薄H缦聢D所示:
接下來线得,我們可以定義抓取規(guī)則饶唤。
定義抓取規(guī)則
在添加規(guī)則之前,我們還需要定義類似于表結(jié)構(gòu)的數(shù)據(jù)集贯钩。如下圖所示:
接下來搬素,點擊“采集管理》規(guī)則管理”,添加規(guī)則魏保,打開添加規(guī)則頁面熬尺,如下圖所示:?
抓取規(guī)則腳本如下:
[
? {
? ? __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
? ? ? }
? ? }
? }
]
然后點擊測試,將會進行測試抓取谓罗。我們發(fā)現(xiàn)數(shù)據(jù)的確被抓取到了粱哼,如下圖所示:?
配制抓取器抓取
這和之前是一樣的,將抓取器設(shè)置抓取站點“mydict”.然后點擊開始抓取檩咱。然后會在數(shù)據(jù)管理里面查看抓取的數(shù)據(jù)揭措。
結(jié)論
GoldData半自動登錄實質(zhì)是提供了一個可以人工介入來異步獲取會話的框架,既可以調(diào)用AI接口做到完全自動登錄刻蚯;也可以將類似于驗證碼需要復(fù)雜識別需要提供輸入時绊含,直接將cookie或者token信息通過郵件收發(fā)到GoldData平臺(這樣可以不管CAPTCHA多復(fù)雜 ),都可以讓GoldData抓取數(shù)據(jù)的動作持續(xù)進行下去炊汹。