筆者所在公司是一家互聯網金融公司,其中最大的一塊業務就是貸款。當一個用戶向咱們申請貸款時,咱們須要用戶受權獲取用戶的徵信數據,而後將數據交給風控規則引擎生成一份數據報告,憑藉這份數據報告來判斷是否能夠給這個用戶放貸。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。加密