選擇我們,所有數據都是你的!

服務熱線:029-87553281

聯系我們

029-87553281(陜西 西安)

13389148466 或 13571845363

1649677458 或 181697466

hello@webscraping.cn

歡迎咨詢,點擊這里給我發送消息。 歡迎咨詢,點擊這里給我發送消息。

技術文章

如何突破防采集策略-數據加密

發布時間:2013-06-02

目前常見的Web反采集策略大概有以下幾種:

  • 1)數據加密;
  • 2)限制訪問頻率;
  • 3)數據以非文本形式展現;
  • 4)驗證碼保護;
  • 5)Cookie驗證;

本文主要探討一下如何突破“數據加密”:

反采集策略 - “數據加密”的原理:

  • Web服務器端腳本將HTML文檔中的部分數據加密,然后發送給HTTP客戶端(瀏覽器)。
  • 瀏覽器使用JavaScript將密文還原成文明后顯示。
     

突破的方法:

根據JavaScrip解密算法源碼,實現自己采集程序所需還原算法,在接收到服務器應答數據后,先對數據進行解密,然后再進行提取。

一個實例:

Whitepages的電話(手機)號碼是這樣輸出的:

  1. <script type="text/javascript" > <br>  
  2. // <![CDATA[  
  3. document.write(WPOL.Util.rotDecode('(57) 1771 3775'));  
  4. // ]]>  
  5. </script>  

在瀏覽器中看到的電話號碼為:(02) 6226 8220,而不是”(57) 1771 3775“,如下所示:

在源碼中可以找到WPOL.Util.rotDecode的源碼如下:

  1. rotDecode: function(C) {  
  2.     var B, A = "";  
  3.     for (B = 0; B < C.length; B++) {  
  4.         var E = C.charAt(B);  
  5.         if (/[a-zA-Z]/.test(E)) {  
  6.             var D = /[A-Z]/.test(E) ? "A""a";  
  7.             A += String.fromCharCode((E.charCodeAt(0) - D.charCodeAt(0) + 39) % 26 + D.charCodeAt(0))  
  8.         } else {  
  9.             if (/[0-9]/.test(E)) {  
  10.                 A += String.fromCharCode((E.charCodeAt(0) - 48 + 15) % 10 + 48)  
  11.             } else {  
  12.                 A += E  
  13.             }  
  14.         }  
  15.     }  
  16.     return A  

我們的采集程序是采用Python編寫的,所以需要根據上述代碼實現我們自己的解密算法,如下:

  1. def phone_decode(phone_en):  
  2.     """Decode whitepages phone number 
  3.     """  
  4.     phone_de = ''  
  5.     for c in phone_en:  
  6.         if re.compile(r'[a-zA-Z]').search(c):  
  7.             if re.compile(r'[A-Z]').search(c):  
  8.                 d = 'A'  
  9.             else:  
  10.                 d = 'a'  
  11.             phone_de += chr((ord(c) - ord(d) + 39) % 26 + ord(d))  
  12.         else:  
  13.             if re.compile(r'[0-9]').search(c):  
  14.                 phone_de += chr((ord(c) - 48 + 15) % 10 + 48)  
  15.             else:  
  16.                 phone_de += c  
  17.     return phone_de  

測試:

免费一区二区三区视频,影音先锋中文字幕,国产成人综合色视频精品,亚洲影院天堂中文AV色