央行征信爬虫解决方案

笔者所在公司是一家互联网金融公司,其中最大的一块业务就是贷款。当一个用户向咱们申请贷款时,咱们须要用户受权获取用户的征信数据,而后将数据交给风控规则引擎生成一份数据报告,凭借这份数据报告来判断是否能够给这个用户放贷。node

其中获取用户征信数据这一步就是用爬虫来实现的。爬虫的应用领域很是普遍,技术手段也是五花八门。本文主要以央行征信报告为爬取目标,讲解三种爬虫的技术解决方案。

方案一:基于接口的爬虫

技术栈:

  • nodejs
  • request
  • cheerio

优势:

  • 流程简单
  • 支持并行爬取
  • 响应速度快
  • 对环境没有特殊要求

缺点:

  • 须要手动维护用户cookie
  • 方案不可用

补充:

这个方案其实原本是最佳方案。但后来央行征信改版,登陆页密码框改用ActiveX控件来加密用户密码。纯接口的方式没法经过央行征信的登陆验证,因此该方案如今已经不可用了。jquery

方案二:基于浏览器的爬虫

技术栈:

  • nodejs
  • selenium
  • winio
  • jquery

优势:

  • 可经过央行征信的登陆验证
  • 不须要维护用户cookie

缺点:

  • 依赖IE浏览器环境
  • 响应速度慢
  • 不支持并行爬取
  • 驱动级键盘输入不稳定

补充:

因为ActiveX控件只能在IE浏览器中才能加载,因此爬虫程序必须部署在windows机器上,也就是图中的worker机。另外,ActiveX控件的密码没法经过代码直接复制,必须依赖驱动级键盘输入来输入用户密码。git

方案三:基于浏览器+接口的爬虫

技术栈:

  • nodejs
  • selenium
  • winio
  • request
  • cheerio

优势:

  • 可经过央行征信的登陆验证
  • 响应速度快
  • 支持并行爬取

缺点:

  • 依赖IE浏览器环境
  • 驱动级键盘输入不稳定
  • 须要部署多台worker机
  • 流程复杂
  • 须要手动维护用户cookie

补充:

该方案实际上是结合了方案一和方案二的优势。worker机用来加载ActiveX控件,输入用户密码,获取加密后密码后返回给爬虫服务端。剩下的流程就都和方案一相同。github

代理优化

央行征信有反爬机制,若是同一个IP登陆了不少个用户,这个IP就有可能被封。因此爬虫程序须要加代理IP来提高稳定性和成功率。这个问题其实挺好解决的,花钱买一个代理IP服务就行了。windows

可是代理IP服务商的质量良莠不齐,服务好的价格贵,便宜的又不稳定。若是你像笔者同样,只能申请到像太阳代理这样的渣渣代理。那我这里给你提供一个思路,提高渣渣代理服务的稳定性。浏览器

写一个定时任务,每隔一段时间就获取一次IP,每次取n个。而后分别用这些个IP去请求央行征信的登陆页,若是1秒内成功响应,就把这个IP存到IP池里,不然就丢弃。cookie

经过定时任务维护一个高质量的IP池,能够极大地提高爬虫的稳定性和成功率。优化

其余

以上三种方案以及代理优化方案,都在笔者所在公司生产环境使用过。实际使用的技术栈和文中列举的有所出入。文中的技术栈是我过后总结以为最佳的技术方案。从此我会抽时间重构方案三的代码,而后开源到github。加密

相关文章
相关标签/搜索