本文將介紹使用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
輸入用戶名和密碼(都是admin),就能夠打開首頁單詞列表。git
點擊「採集管理》網站管理」,點擊「添加」按扭,添加名爲mydict的站點。以下所示:github
接下來配製登陸和檢查會話腳本,點擊「設置半自動登陸」,會打開站點半自動登陸配製頁面,以下圖所示:ajax
登陸腳本以下: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;
配製好以後,咱們回到網站管理頁面,點擊「啓動登陸」,則會開始執行「自動登陸」,這以後,點擊「查詢」按扭來刷新頁面,能夠看到「等待輸入」的狀態。以下圖所示:瀏覽器
此時,您設置的通知郵箱,也應該同時收到了郵件。點開郵件,或者點擊頁面上的「錄入等待輸入」按扭,將會看到以下內容:
依據郵件內容,回覆郵件「{{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抓取數據的動做持續進行下去。