【爬虫-反爬虫】系列一:反爬虫之cookie(3)

反爬虫之cookie



前面讲过,cookie存储在浏览器端,常用来保存“认证数据”,请求会携带这些数据发送给服务器,这样服务器才能判断当前请求的状态,比如是否自动登录?


状态不同,服务器返回的数据也会不一样。比如未登录状态会先返回一个登录界面,而登录状态则直接返回已登录界面。


除了自动登录外,cookie还会存放其它状态数据,这取决于网站业务。


有些网站还会设置一些cookie验证,如果你的请求不包含它们,则拒绝访问。


所以,在爬虫模拟请求时,应该先理顺哪些cookie是必须的,哪些是不必的。




分析cookie


为了判断一个网站是否会检测cookie,可以做一些简单的测试。


一般来说,涉及到查询业务的数据,验证cookie的可能性会大一些,但实际上大部分都不会检验cookie。


比如我访问淘宝电影网,就必须要带上淘宝的cookie。


如果不带会怎么样?虽然前几次能正常访问,但在访问数十次后,你会发现返回的不是请求数据,而是一个验证码页面,此时淘宝就已经对你的ip封锁了,而解决方法也很简单,先输入正确验证码解锁,然后学乖一点,每次发送请求的时候记得带上cookie。


如果你使用的是linux后台,建议安装一个界面(如VNC)和浏览器,方便给ip解锁。


当然你也可以让程序自动解锁,如果你看了本专题下的验证码部分和session部分,就能做到,只是实施起来挺麻烦。


接下来带大家调试一下南航航班请求会不会检验cookie呢?为了方便,我使用Fiddler来调试。


完整的http请求就像下图这样~



红框中是会发送给服务器的cookie。


你可以把红框中的cookie删除,然后再次请求,就像下面这样:



通过判断两次请求返回的数据是否一致,就能判断服务器是否对cookie有验证。


在这里,返回的数据正好是一致的,说明南航官网对航班数据的查询并没有cookie验证。


模拟cookie


通过Fiddler可以很方便的发送请求,那如何在python中实现带cookie的请求呢?


以下是我常用的模拟方式:



通过上面的接口创建cookie后,就可添加在请求中了。




有时候你需要动态获取cookie,也就是从返回的数据中找到服务器最新设置的cookie,提取出来即可。(一般针对SESSIONID才会这样做)


TIPS


不知你是否注意到,我在创建cookie的时候使用的是cookielib.Cookie构造函数。为什么要这样做呢?因为能够灵活设置cookie的相关属性。而我也建议你这样做。


尤其要注意cookie的域名属性,因为有的请求下的cookie包含了多种域名cookie,比如淘宝网的cookie列表:




其次,有效期也很重要,请给cookie设置一个永不过期的有效期。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值