央行徵信爬蟲解決方案

drafish發表於2019-04-16

筆者所在公司是一家網際網路金融公司,其中最大的一塊業務就是貸款。當一個使用者向我們申請貸款時,我們需要使用者授權獲取使用者的徵信資料,然後將資料交給風控規則引擎生成一份資料包告,憑藉這份資料包告來判斷是否可以給這個使用者放貸。

央行徵信爬蟲解決方案
其中獲取使用者徵信資料這一步就是用爬蟲來實現的。爬蟲的應用領域非常廣泛,技術手段也是五花八門。本文主要以央行徵信報告為爬取目標,講解三種爬蟲的技術解決方案。

方案一:基於介面的爬蟲

央行徵信爬蟲解決方案

技術棧:

  • nodejs
  • request
  • cheerio

優點:

  • 流程簡單
  • 支援並行爬取
  • 響應速度快
  • 對環境沒有特殊要求

缺點:

  • 需要手動維護使用者cookie
  • 方案不可用

補充:

這個方案其實本來是最佳方案。但後來央行徵信改版,登入頁密碼框改用ActiveX控制元件來加密使用者密碼。純介面的方式無法通過央行徵信的登入驗證,所以該方案現在已經不可用了。

方案二:基於瀏覽器的爬蟲

央行徵信爬蟲解決方案

技術棧:

  • nodejs
  • selenium
  • winio
  • jquery

優點:

  • 可通過央行徵信的登入驗證
  • 不需要維護使用者cookie

缺點:

  • 依賴IE瀏覽器環境
  • 響應速度慢
  • 不支援並行爬取
  • 驅動級鍵盤輸入不穩定

補充:

由於ActiveX控制元件只能在IE瀏覽器中才能載入,所以爬蟲程式必須部署在windows機器上,也就是圖中的worker機。另外,ActiveX控制元件的密碼無法通過程式碼直接複製,必須依賴驅動級鍵盤輸入來輸入使用者密碼。

方案三:基於瀏覽器+介面的爬蟲

央行徵信爬蟲解決方案

技術棧:

  • nodejs
  • selenium
  • winio
  • request
  • cheerio

優點:

  • 可通過央行徵信的登入驗證
  • 響應速度快
  • 支援並行爬取

缺點:

  • 依賴IE瀏覽器環境
  • 驅動級鍵盤輸入不穩定
  • 需要部署多臺worker機
  • 流程複雜
  • 需要手動維護使用者cookie

補充:

該方案其實是結合了方案一和方案二的優點。worker機用來載入ActiveX控制元件,輸入使用者密碼,獲取加密後密碼後返回給爬蟲服務端。剩下的流程就都和方案一相同。

代理優化

央行徵信有反爬機制,如果同一個IP登入了很多個使用者,這個IP就有可能被封。所以爬蟲程式需要加代理IP來提升穩定性和成功率。這個問題其實挺好解決的,花錢買一個代理IP服務就好了。

但是代理IP服務商的質量參差不齊,服務好的價格貴,便宜的又不穩定。如果你像筆者一樣,只能申請到像太陽代理這樣的渣渣代理。那我這裡給你提供一個思路,提升渣渣代理服務的穩定性。

寫一個定時任務,每隔一段時間就獲取一次IP,每次取n個。然後分別用這些個IP去請求央行徵信的登入頁,如果1秒內成功響應,就把這個IP存到IP池裡,否則就丟棄。

通過定時任務維護一個高質量的IP池,可以極大地提升爬蟲的穩定性和成功率。

其他

以上三種方案以及代理優化方案,都在筆者所在公司生產環境使用過。實際使用的技術棧和文中列舉的有所出入。文中的技術棧是我事後總結覺得最佳的技術方案。今後我會抽時間重構方案三的程式碼,然後開源到github。

相關文章