笔者所在公司是一家互联网金融公司,其中最大的一块业务就是贷款。当一个用户向咱们申请贷款时,咱们须要用户受权获取用户的征信数据,而后将数据交给风控规则引擎生成一份数据报告,凭借这份数据报告来判断是否能够给这个用户放贷。node
这个方案其实原本是最佳方案。但后来央行征信改版,登陆页密码框改用ActiveX控件来加密用户密码。纯接口的方式没法经过央行征信的登陆验证,因此该方案如今已经不可用了。jquery
因为ActiveX控件只能在IE浏览器中才能加载,因此爬虫程序必须部署在windows机器上,也就是图中的worker机。另外,ActiveX控件的密码没法经过代码直接复制,必须依赖驱动级键盘输入来输入用户密码。git
该方案实际上是结合了方案一和方案二的优势。worker机用来加载ActiveX控件,输入用户密码,获取加密后密码后返回给爬虫服务端。剩下的流程就都和方案一相同。github
央行征信有反爬机制,若是同一个IP登陆了不少个用户,这个IP就有可能被封。因此爬虫程序须要加代理IP来提高稳定性和成功率。这个问题其实挺好解决的,花钱买一个代理IP服务就行了。windows
可是代理IP服务商的质量良莠不齐,服务好的价格贵,便宜的又不稳定。若是你像笔者同样,只能申请到像太阳代理这样的渣渣代理。那我这里给你提供一个思路,提高渣渣代理服务的稳定性。浏览器
写一个定时任务,每隔一段时间就获取一次IP,每次取n个。而后分别用这些个IP去请求央行征信的登陆页,若是1秒内成功响应,就把这个IP存到IP池里,不然就丢弃。cookie
经过定时任务维护一个高质量的IP池,能够极大地提高爬虫的稳定性和成功率。优化
以上三种方案以及代理优化方案,都在笔者所在公司生产环境使用过。实际使用的技术栈和文中列举的有所出入。文中的技术栈是我过后总结以为最佳的技术方案。从此我会抽时间重构方案三的代码,而后开源到github。加密