java網絡爬蟲學習記錄(二)抓包分析

一、網絡抓包工具介紹和選擇

1.1 按面向的對象分類
瀏覽器抓包工具和全局抓包工具

瀏覽器抓包工具:
IE Developer(自帶)
Chrome Developer(自帶)
FireFox Developer(自帶)
FireFox Firebug:只針對firefox
HttpWatch: 只針對IE瀏覽器
FireFox HttpFox:只針對firefox
自帶抓包,簡單易用,但不利於複雜應用。

全局抓包工具:
Http Analyzer: 針對http、https協議的本機與網絡通訊時的抓包工具
WireShark: 什麼都行,主要是tcp、ip包層次,
但主要應用網絡實時流之tcp、ip包分析上,而不怎麼用其做爬蟲的抓包工具。
Fiddler:c#實現的爬蟲工具,也很強大,可以修改網絡通訊中的包,方便調試。
Winpcap: 與wireshark類似,但只能應用於windows系統。

1.2 選擇方法

1、功能穩定和齊全(根據它就排除掉了瀏覽器自帶抓包工具)
2、熟悉習慣
跟個人相關,我一直習慣用httpwatch,主要是能滿足當前實際應用的需求。
在實際開發當中,一般選擇瀏覽器自帶+第三方抓包,即我用IE Developer+HttpWatch8.5版本配合來搞定問題。

二、瀏覽器抓包工具經典應用

1、web項目的開發測試,(比較簡單,不用第三方抓包工具亦可)
2、非爬蟲性質的抓包分析 (比較簡單,不用第三方抓包工具亦可)
3、爬蟲的抓包分析   (情況相對比較複雜,一般要採用瀏覽器自帶+第三方抓包)

三、 抓包demo示例

1、主要以IE Developer+HttpWatch爲工具,
   以簡單站點:新浪新聞爲例,http://news.sina.com.cn/
   簡單的特點:
       1).內容基本在直接請求的URL中。
       2).沒有特定的權限驗證。
       3).沒有特別的js等內容動態解析。

   以複雜站點:新浪微博爲例,http://www.weibo.com/
   複雜的特點:
       1).內容的構成往往源於多個請求。
       2). 數據的組織方式多樣,偶爾涉及到ajax請求和js的數據動態填充。
2、http協議小介
    (1)http協議包括的method,主要爲get,post,put,delete。
         get代表是查,post代表是更新,put代表上傳,delete代表刪除。
         後續在落實時,人們把這幾件事都歸在了get、post當中,
         很少有相應去專門符合協議去發送method request。

    (2)http協議status code
      1** : 代表的是服務器已收到信息,但還沒處理完,將繼續。
           最原始的ajax請求中,以判斷status code來決定是否該次的ajax異步請求完成,或狀態。
     2** : 返回狀態,一般是代表成功終止,即正常的一次請求完成。
           等於200,代表ok
     3** : 請求的轉移。
           301:永久轉移,會在響應頭中跟隨location這個key,
           來標誌下次該跳轉的目標URL地址。
           302:臨時轉移,。。。
           304:無更新,從緩存中取數據。
     4** : 客戶端錯誤。
           400客戶端格式錯誤。401無權限。403禁止訪問。
           404:file not found,文件找不到。
     5** :服務器錯誤。
           500:服務器端處理當中出現異常。

 (3)http header參數
      http header send部分

      accept: 客戶端可接受的數據類型。
              text/html,即html的文本
              application/xhtml+xml,即xhtml,像jsp,asp等都屬於這種
      accept-encoding: 客戶端要求服務器返回的數據編碼格式,
               一般設爲gzip,deflate的爲多,
               gzip壓縮,其算法爲deflate。肯定是無損壓縮。
      accept-language:要求的自然語言,注意語言和編碼的概念不同。
      connection: 代表client與server的鏈接性,是keep-alive或是none
      cookie    :client與server之間的溝通狀態信息。
      host      :  client發過去請求後,由哪個地址來解析該請求。
      If-Modified-Since :代表該網頁自哪個時間開始,沒有再改變過。
      user-agent: 即ua,客戶端把os、browser type等封裝成ua發送給服務器端。


      下邊爲http header received部分
      age: 代表該頁是從緩存中取出後的多長時間。
      cache_control:服務器要求客戶端是否緩存該網頁。
      Content-Encoding:server給client的數據的編碼格式,往往爲gzip。
      Content-Length: server 給client端傳送數據的總字節數,經常用於判斷是否接收結束。
      Content-Type:返回數據的類型,一般爲text/html,即純文本類型
  (4)http cookie參數
      cookie包括兩部分,一部分sent,一部分是receive。
      要嚴格區分開,在爬蟲開發的過程中,構建cookies時尤爲重要。 
      cookie中往往包括N多的key,要儘量找出其關鍵的key。

      (5) ETAG和if-modified-since
          都跟過期時間有關。很多網址是不更新if-modified-since,
      而是通過一個hash值或是時間值來給ETAG,標誌該資源是否有過更新,從
      而使資源的更新與時間無關,而與這個key有關。

      (6) get和post的區別
          參數傳遞方式不一樣:get較簡單,
          post是不在地址欄中顯示的,而且相應的生成對應掩碼的方式,較安全。
          參數的傳遞渠道不同,get走的是http協議頭,往往被瀏覽器、os限制了長度,往往小於2KB。
          post走的是http消息體,長度不限制。

這是我用firefox抓到的一組request頭和response頭
一組請求和相應

四、總結

抓包分析是爬蟲研發的最基礎和關鍵的步驟。
要足夠細心和耐心,開發時應採取循序漸進的步驟,並在每個關鍵環節留有日誌輸出,方便爬蟲問題的問題跟蹤與追根溯原。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章