爬蟲爬數據時,post數據亂碼解決辦法

  最近在寫一個爬蟲,目標網站是:http://zx.bjmemc.com.cn/,可能是爲了防止被爬取數據,它給自身數據加了密。用谷歌自帶的抓包工具也不能捕獲到數據。於是下了Fiddler。
    Fiddler的爬取結果如下:

    可見,除了頭信息之外,下面的數據信息顯示成了亂碼。這樣就不能用程序模擬瀏覽器發送數據了。
    解決辦法之一就是獲取此字符串的十六進制編碼。將Fiddler切換至Hexview,如下圖所示:

    其中藍色部分是header頭信息,黑色字體就是傳送的數據。你還可以右鍵-》取消勾選show header,這樣顯示的便都是數據信息。
    我們程序中可以將這個十六進制字符長串轉化成字符串,然後發送到web服務器中。
    轉化的程序如下所示:

[csharp] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. public static byte[] GetByteArray(string frame)  
  2. {  
  3.     byte[] buffer = new byte[frame.Length / 2];    //注意每兩個十六進制字符代表一個二進制編碼  
  4.     for (int i = 0; i < frame.Length / 2; i++)  
  5.     {  
  6.         int t = GetData(frame[2 * i]) * 16 + GetData(frame[2 * i + 1]);  
  7.         buffer[i] = (byte)t;  
  8.      }  
  9.      return buffer;  
  10. }  
  11.    
  12. static int GetData(char p)    //獲得ASCII編碼  
  13. {  
  14.     if (p <= '9' && p >= '0')  
  15.     {  
  16.         return p - '0';  
  17.     }  
  18.     else  
  19.     {  
  20.         return p - 'a' + 10;  
  21.     }  
  22. }  

    1、先選中你要導出的十六進制字符長串-》右鍵-》save selected bytes-》到一文件中。    但是遇到一個問題就是,如何將Fiddler的十六進制字符串拷貝出來,若手動抄寫,很不現實,一來太長,二來怕錯。可以藉助Notepad++或者UltraEdit轉化過來。本人用Notepad++實驗成功:

    2、用Notepad++打開此文件,發現仍然是亂碼
    3、下載十六進制顯示插件下載:HexEditor_0_9_5_UNI_dll.zip
    4、解壓後將HexEditor.dll文件放在Notepad++安裝目錄的plugins目錄下,重啓notepad++

    5、再次用Notepad++打開文件,plugins->HEX-Editor->View in HEX,顯示如下:

   6、選中你要複製的十六進制字符串,複製,然後新建文本,粘貼,就是一個帶有空格的字符串了。去除空格和換行即可。
    7、有一種快速去除空格的方法,選中一個空格,ctrl+f,切換到替換標籤,然後點擊替換所有按鈕,這樣將所有的空格都替換成了空字符串,也就刪除了所有空格。

發佈了165 篇原創文章 · 獲贊 1 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章