一、网络抓包工具介绍和选择
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头
四、总结
抓包分析是爬虫研发的最基础和关键的步骤。
要足够细心和耐心,开发时应采取循序渐进的步骤,并在每个关键环节留有日志输出,方便爬虫问题的问题跟踪与追根溯原。