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头
一组请求和相应

四、总结

抓包分析是爬虫研发的最基础和关键的步骤。
要足够细心和耐心,开发时应采取循序渐进的步骤,并在每个关键环节留有日志输出,方便爬虫问题的问题跟踪与追根溯原。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章