自動查企業工商登記信息(企業信用信息公示系統、極驗Geetest與Python爬蟲)

一、引言:

信貸作業的過程就是信息搜集和驗證的過程。對于企業客戶,最權威的信息渠道莫過于工商登記信息,各種第三方查詢工具(天眼查、啟信寶、各種各樣的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:在一筆貸款審批中,有什么措施能在不變更審批條件下,可以不提供資料就判斷客戶的資質呢?

H Howard:在消費金融公司工作是一種什么樣的體驗?

H Howard:非金融出身的風險控制應該學哪些方面的專業知識?

H Howard:財務報表分析具體怎么做?

H Howard:信貸的全流程是怎么做的?是否有可能做到較高的自動化?

最近寫了本小書,歡迎購買

圖片發自簡書App
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,936評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,744評論 3 421
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,879評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,181評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,935評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,325評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,384評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,534評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,084評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,892評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,623評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,322評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,735評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,990評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,800評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,084評論 2 375

推薦閱讀更多精彩內容

  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,059評論 6 13
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,799評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,677評論 25 708
  • 這是一個關于我的奇葩舍友的故事完整故事請查看目錄 不知道從什么時候開始,北京的賣唱隊伍里注入了一脈新鮮的血液。 他...
    孤葉南飛閱讀 16,909評論 14 4
  • 這是陽陽的第24幅作品,對數學圖形部分進行了分析。中心圖主要由三角形、平四邊形組成。三個分支分別為平行四邊形,三角...
    民大鐵老師閱讀 352評論 5 0