一、引言:

信贷作业的过程就是信息搜集和验证的过程。对于企业客户,最权威的信息渠道莫过于工商登记信息,各种第三方查询工具(天眼查、启信宝、各种各样的API等等)也来源于此。

常见的问题在于,我们不仅要查借款人,还要查其法人股东(不断追溯),下属企业,以及担保企业、上下游主要交易对手等等。这样,调查一个客户往往要查询七八户企业。如何高效、自动完成查询?如何在查询的同时规范化存储、整理各种信息(而不是胡乱地复制粘贴)?这是本文试图解决的问题。

======================================================================

注意:这里仅为本人信贷工作学习之心得,切勿转载,或用于采集他人信息使用,恶意采集他人信息要承担刑事责任。

======================================================================

二、信贷理论基础:

对于一个企业信贷客户,要查哪些相关企业?参考下面的内容:

三、网站分析

(一)我们先看手工查询流程

2、录入关键词查询,这时候会跳出验证码(大名鼎鼎的geetest)

拖动滑块

看到查询结果50条

点开第一条,能看到基本信息,点击不同栏目,可以看到更多信息

点击右上角信息打印,再次跳出验证码

滑动滑块,打印报告

信息非常详尽

(二)技术要点

1、第一步,录入主页,返回两个参数gt,challenge

gt是固定的,challenge会变化

有了两个参数,就可以获取验证码

bg,fullbg代表有缺口和没缺口的背景图地址,slice代表缺块图地址

下面就是背景图

当然,图片经过了混淆处理,需要重新拼图

鼠标拖动验证码的过程,实际上是向网站提交了一串参数,而网站通过校验参数来判断查询者是人类还是机器人。

提交的参数中,gt、challenge已知,userresponse、passtime、a不知道如何来的,我们搜索发现在js文件中出现过(文件版本会不断更新)。

打开js文件:

格式化

找到userresponse、passtime、a的出处:var p = {

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与敌人首脑之间的的肉搏结局。再强大的风控体系都离不开人的作用。也没有什么一劳永逸的“工具”,风控就是人与人的博弈。

五、信息分析

查询了这些信息,如何分析?有时候走得太远,反而忘记了为什么出发,总想爬更多的信息(陷入各种科技坑),其实拿到信息只是最简单的一步。如何透过各种或真或假的信息挖掘企业的信用与经营状况?名称、地址、注册资本、法定代表人什么法律含义?各种变更有什么潜在的意图?如何挖掘企业的实际控制人?如何判断实际控制人的所思所想?这才是真正的难题。

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

图片发自简书App

python爬虫-国家企业_自动查企业工商登记信息(企业信用信息公示系统、极验Geetest与Python爬虫)...相关推荐

  1. 公示系统php,企业信用查询公示系统

    新华社北京7月18日电(记者 安蓓)"对危害人民群众生命财产安全的严重失信行为,会采取十分严厉的惩戒措施,在一定时限内实施行业和市场禁入,有些要永久逐出市场."国家发展改革委副主任 ...

  2. 国家企业信用信息公示系统爬虫

    本文仅供学习交流使用,请勿用于商业用途或不正当行为 如果侵犯到贵公司的隐私或权益,请联系我立即删除 国家企业信用信息公示系统及30多个省份的子系统均采用了加速乐的反扒,仔细研究可发现其主要的5个coo ...

  3. JS逆向之国家企业信用信息公示系统Cookie传递

    目标地址 http://www.gsxt.gov.cn/corp-query-entprise-info-xxgg-100000.html 分析 POST http://www.gsxt.gov.cn ...

  4. 【爬虫】关于企业信用信息公示系统-加速乐最新反爬虫机制

    ( ̄▽ ̄)~*又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构. 升级后网站的层次结构并没有太多变化,表面上是国家企业信用信 ...

  5. 艺赛旗(RPA)国家企业信用信息公示系统验证码破解(一)

    目前艺赛旗RPA已经更新到8.0版本,可以让所有用户免费下载试用http://www.i-search.com.cn/index.html?from=line1 (复制链接下载) 我们一般会通过国家企 ...

  6. 全国企业信用信息公示系统

    全国企业信用信息公示系统 http://gsxt.saic.gov.cn/

  7. 爬虫进阶教程:极验(GEETEST)验证码破解教程

    原文链接及原作者:爬虫进阶教程:极验(GEETEST)验证码破解教程 | Jack Cui 一.前言 爬虫最大的敌人之一是什么?没错,验证码![Geetest]作为提供验证码服务的行家,市场占有率还是 ...

  8. geetest文件夹什么意思_极验geetest的使用

    前端: $("#show-mobile-captcha").click(function () { //alert('ok'); $("#popup-captcha-mo ...

  9. 国家企业信用信息公示系统爬虫——流程分析

    本文仅供学习交流使用,请勿用于商业用途或不正当行为 如果侵犯到贵公司的隐私或权益,请联系我立即删除 20201212更新,附上第二步js改写的代码 # 2.第二次访问http://www.gsxt.g ...

最新文章

  1. salt-api https证书报错解决方法
  2. python工程师薪资-Python工程师工资多少
  3. 实习小白::(转) Cocos2d-x 3.0开发(十三)使用CocoStudio编辑帧事件并关联到程序...
  4. tf-idf:信息检索
  5. MySQL也有潜规则 – Select 语句不加 Order By 如何排序?
  6. 今日代码(200708)--缺失值处理
  7. 81. 搜索旋转排序数组 II---Leecode----java
  8. python运行结果图_[宜配屋]听图阁
  9. element table表格里的多选按钮,根据条件判断是否可以被选中
  10. CRC冗余校验码的介绍和实现
  11. Python面向对象中的多态与静态语言(C++,Java)的区别
  12. 7.高性能MySQL --- MySQL 高级特性
  13. CRC循环校验码的计算
  14. 一文揭秘字节跳动、华为、京东的薪资职级
  15. linux开启IP转发
  16. python统计元音字母个数_Quzh[python]统计元音字母——输入一个字符串,统计处其中元音字母的数量。...
  17. 阿里云大数据专业认证(ACP),值得报名吗?
  18. matlab升幂降幂排列,升幂排列与降幂排列测试题及答案
  19. YOLOV5:在本地电脑训练模型
  20. android 更改浏览器默认主页

热门文章

  1. 在机自学院自强队的这一年
  2. vscode 格式化后函数后空格被删
  3. OSChina 周二乱弹 —— 好朋友都脱单了 而我就比较厉害了
  4. 安卓高德地图 - (附近信息点Poi与标记Marker2)
  5. RecyclerView滑动置顶点击置顶的实现
  6. android手机固件升级原理,为什么常说Android手机千万别频繁的系统升级,背后的真实原因?...
  7. SSDAlloc:用 SSD 扩展内存
  8. @RequestBody、 @RequestParam 、 @PathVariable 和 @Vaild 注解的使用及区别
  9. vaild-palindrome
  10. 360cdn能挡住cc攻击_又被CC攻击弄得心有余悸?莫怕!这里教你如何防御