一、引言:
信貸作業的過程就是信息搜集和驗證的過程。對于企業客戶,最權威的信息渠道莫過于工商登記信息,各種第三方查詢工具(天眼查、啟信寶、各種各樣的API等等)也來源于此。
常見的問題在于,我們不僅要查借款人,還要查其法人股東(不斷追溯),下屬企業,以及擔保企業、上下游主要交易對手等等。這樣,調查一個客戶往往要查詢七八戶企業。如何高效、自動完成查詢?如何在查詢的同時規范化存儲、整理各種信息(而不是胡亂地復制粘貼)?這是本文試圖解決的問題。
======================================================================
注意:這里僅為本人信貸工作學習之心得,切勿轉載,或用于采集他人信息使用,惡意采集他人信息要承擔刑事責任。
======================================================================
二、信貸理論基礎:
對于一個企業信貸客戶,要查哪些相關企業?參考下面的內容:
H Howard:銀行信貸中的「穿透原則」是什么?如何理解?
H Howard:《商業銀行集團客戶授信業務風險管理指引》中的「集團客戶」如何理解,能否舉例說明?
三、網站分析
(一)我們先看手工查詢流程
打開主頁國家企業信用信息公示系統
2、錄入關鍵詞查詢,這時候會跳出驗證碼(大名鼎鼎的geetest)
拖動滑塊
看到查詢結果50條
點開第一條,能看到基本信息,點擊不同欄目,可以看到更多信息
點擊右上角信息打印,再次跳出驗證碼
滑動滑塊,打印報告
信息非常詳盡
(二)技術要點
1、第一步,錄入主頁,返回兩個參數gt,challenge
gt是固定的,challenge會變化
有了兩個參數,就可以獲取驗證碼
bg,fullbg代表有缺口和沒缺口的背景圖地址,slice代表缺塊圖地址
下面就是背景圖
當然,圖片經過了混淆處理,需要重新拼圖
鼠標拖動驗證碼的過程,實際上是向網站提交了一串參數,而網站通過校驗參數來判斷查詢者是人類還是機器人。
提交的參數中,gt、challenge已知,userresponse、passtime、a不知道如何來的,我們搜索發現在js文件中出現過(文件版本會不斷更新)。
打開js文件:
格式化
找到userresponse、passtime、a的出處:
var p = {
gt:a.config.gt,
challenge: a.config.challenge,
userresponse: ca.ra(l, a.config.challenge),
passtime: Q.t("endTime",a.id).getTime() - Q.t("startTime",a.id),
imgload: Q.t("imgload",a.id),
a: encodeURIComponent(n)
};
要計算userresponse,需要ca.ra,那就繼續找:
ca.ra = function(a, b) {
for (var c = b.slice(32), d = [], e = 0; e < c.length; e++) {
var f = c.charCodeAt(e);
d[e] = f > 57 ? f - 87 : f - 48
}
c = 36 * d[0] + d[1];
var g = Math.round(a) + c;
b = b.slice(0, 32);
var h, i = [[], [], [], [], []],
j = {},
k = 0;
e = 0;
for (var l = b.length; e < l; e++) h = b.charAt(e),
j[h] || (j[h] = 1, i[k].push(h), k++, k = 5 == k ? 0 : k);
for (var m, n = g,
o = 4,
p = "",
q = [1, 2, 5, 10, 50]; n > 0;) n - q[o] >= 0 ? (m = parseInt(Math.random() * i[o].length, 10), p += i[o][m], n -= q[o]) : (i.splice(o, 1), q.splice(o, 1), o -= 1);
return p
};
以此類推,需要什么找什么,最后找到參數的計算方法。
最終發現,計算參數需要一串數據,那就是滑塊拖動形成的鼠標軌跡,不同人拖動,形成不同的軌跡,計算的到不同的參數值,服務器判斷參數值是否合法,進而能否通過驗證碼。
勻速運動,過快拖動,一次到位的拖動,都會被認為是機器人,出現forbidden。
關于這套驗證碼系統,可以看官方介紹
極驗(geetest)是顛覆傳統字符驗證碼的的新一代基于行為式驗證安全技術的驗證碼
什么是基于行為呢?想想《碟中諜5》中吊炸天的門禁黑科技
簡而言之:既要拖到位,又不能過于準確。
兩種思路,一種是笨辦法,大量采集人類拖動形成軌跡庫,直接調用;另一種思路是尋找人類拖動的規律,運用函數去模擬。
看一個采集到的鼠標軌跡:
{-18,-18,0};{0,0,0};{2,0,273};{3,0,288};{4,0,295};{5,0,304};{6,0,343};{7,0,352};{8,0,367};{9,0,383};{10,0,399};{11,0,408};{12,0,423};{13,0,439};{14,0,456};{15,0,479};{16,0,488};{17,0,505};{18,0,528};{19,-1,536};{20,-1,543};{21,-2,552};{22,-2,575};{23,-2,584};{25,-2,600};{26,-2,615};{27,-2,631};{28,-2,655};{29,-2,663};{30,-2,672};{31,-2,695};{32,-2,711};{33,-2,735};{34,-2,752};{35,-2,767};{36,-2,775};{37,-2,792};{38,-2,817};{39,-2,839};{40,-2,895};{41,-2,911};{42,-2,919};{43,-2,952};{44,-2,976};{45,-2,999};{46,-2,1039};{47,-2,1055};{48,-2,1072};{49,-2,1113};{50,-2,1135};{51,-2,1160};{52,-2,1192};{53,-2,1239};{53,-2,1376};
第一個點,{-18,-18,0}是代表鼠標起始位置(在滑塊左邊),然后是鼠標移動到滑塊最左端{0,0,0},開始向右拖動{3,0,288},最后移動到{53,-2,1376}完成。
軌跡節點[53,-2,1376],53表示水平移動的位置,正數代表向右移動,負數代表向左移動; -2表示鼠標上下偏移(一般為零,比如手抖了,就有正負);1376表示耗用時間。
人類拖動的一般規律:首先是鼠標移動到滑塊上,慢慢拖,由慢到快,到了結束時慢慢調整,直至對齊。所以勻速運動肯定被判定為機器人。
找到規律后,可以用一些函數模擬這種“慢-快-慢”的節奏,比如tanh或者常用神經網絡的sigmoid函數。
當然,函數還需要增加隨機數。一般來說,沒必要追求100%的通過率,能到80%就可以用了。
畢竟涉及到商業,這能寫到這樣了,再細就是代碼了。
過了驗證碼以后,我們拿到了關鍵參數geetest_validate,再次提交查詢
可以在網頁源代碼中看到基本信息了
查詢結果很多條,我們要拿到每一條的詳細頁面網址
以該網址,再次查詢,無需任何參數,直接Get
拿到基本信息
其中,找打打印對應的網址
再過一次驗證碼,拿到了關鍵參數geetest_validate,再次提交查詢
拿到了詳細報告的所有信息
至此,下一步就是寫正則表達式,將網頁數據以規范的形式保存起來。撰寫信貸調查報告、審查報告的時候,直接引用數據,或者可以自動生成調查報告,省去了復制粘貼的過程。
四、自動查詢工具
用python實現,兩種思路,一種是selenium+phantomjs,優點是上手快,缺點是難以達到工業級運用,另一種要讀js文件,自己寫計算函數。用到的庫,PIL、requests、lxml。
看下效果:
主要信息有了,有些亂,尚未整理。
關于信息整理,正則表達式,以及Txt,Word,Excel之間的自由轉換,數據分析、商務圖表、盡調報告自動生成等等門面功夫(形式主義的學問)之類的,下次再介紹吧。
工具能用多久?js文件版本一旦更新(或切換驗證碼系統),工具也需要更新,不然就掛了。當然,這僅用于個人提升工作效率使用,一次查詢十來個尚可,大規模采集信息肯定會遇到各種封殺。
驗證碼系統和信貸風控(特別是反欺詐)有相同之處,都是分類問題,驗證碼是區分人類或機器,風控是區分好客戶與壞客戶,既要讓好客戶感到不麻煩,又要讓壞客戶進不來,風控太嚴格,往往誤傷好客戶,這就是矛盾。我們現在強調科技金融,言必談大數據、機器學習、數據挖掘、各種風控黑科技,似乎科技可以解決所有問題。然而,正如武器專家Q為007精心打造的古靈精怪的武器裝備并不能代替007去自動完成任務,工具可以幫助007找到對手,電影總是以007與敵人首腦之間的的肉搏結局。再強大的風控體系都離不開人的作用。也沒有什么一勞永逸的“工具”,風控就是人與人的博弈。
五、信息分析
查詢了這些信息,如何分析?有時候走得太遠,反而忘記了為什么出發,總想爬更多的信息(陷入各種科技坑),其實拿到信息只是最簡單的一步。如何透過各種或真或假的信息挖掘企業的信用與經營狀況?名稱、地址、注冊資本、法定代表人什么法律含義?各種變更有什么潛在的意圖?如何挖掘企業的實際控制人?如何判斷實際控制人的所思所想?這才是真正的難題。
…更多文章請到信貸風控手記-知乎專欄
…更多回答請看H-Howard
H Howard:為什么因為存貨積壓會導致當期毛利率的提高?
H Howard:在一筆貸款審批中,有什么措施能在不變更審批條件下,可以不提供資料就判斷客戶的資質呢?
H Howard:非金融出身的風險控制應該學哪些方面的專業知識?
H Howard:信貸的全流程是怎么做的?是否有可能做到較高的自動化?
最近寫了本小書,歡迎購買