美文网首页Tools01我爱编程
自动查企业工商登记信息(企业信用信息公示系统、极验Geetest

自动查企业工商登记信息(企业信用信息公示系统、极验Geetest

作者: H_Howard | 来源:发表于2017-11-17 08:35 被阅读1887次

一、引言:

信贷作业的过程就是信息搜集和验证的过程。对于企业客户,最权威的信息渠道莫过于工商登记信息,各种第三方查询工具(天眼查、启信宝、各种各样的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:信贷的全流程是怎么做的?是否有可能做到较高的自动化?

最近写了本小书,欢迎购买

自动查企业工商登记信息(企业信用信息公示系统、极验Geetest与Python爬虫)

相关文章

网友评论

本文标题:自动查企业工商登记信息(企业信用信息公示系统、极验Geetest

本文链接:https://www.haomeiwen.com/subject/wredvxtx.html