【爬虫】爬虫实验室

爬虫测试方案


策略种类:

无cookie,IP不变
加cookie,IP不变
无cookie,IP代理

记录信息:

被封时 :

测试机器
请求间隔
被封时间
被封前成功请求次数
被封现象
结论

有带IP代理时:

测试机器
请求间隔
测试时间
成功次数/请求次数
被封现象


搜狗


无cookie,IP不变

测试机器:我的电脑、Linux服务器(168)
请求间隔:1秒
被封时间:3分钟
被封前请求成功次数:118
被封现象:请求跳转进入输入验证码链接

http://www.sogou.com/antispider/?from=/web?query=庆余年&ie=utf8

手动访问链接输入验证码后,解封,解封后,请求119次(3分钟)再次被封。

结论:在无cookie时,封IP,输入验证码可解封。

加cookie,IP不变

测试机器:Linux服务器(168)
请求间隔:1秒
被封时间:3分钟
被封前请求成功次数:110
被封现象:请求跳转进入输入验证码链接

http://www.sogou.com/antispider/?from=/web?query=庆余年&ie=utf8

从windows的浏览器访问该链接,输入验证码后,拿到新的cookie(主要是新SNUID)后,更新到Linux机器的代码里,爬虫解封。
注:输入验证码前拿到的cookie里的SNUID不会改变。

结论:用有效cookie可以解封。

无cookie,IP代理

测试机器:Linux服务器(168)
请求间隔:1秒
测试时间:6分钟
成功次数/请求次数:59/124
被封现象:请求跳转进入输入验证码链接

http://www.sogou.com/antispider/?from=/web?query=庆余年&ie=utf8

加入IP代理后,可能会访问成功,也可能出现验证码跳转页面,也可能出现如下错误:

HTTPSConnectionPool(host=‘www.sogou.com’, port=443): Max retries exceeded with url: /web?query=%E6%88%98%E7%8B%BC&ie=utf8 (Caused by ProxyError(‘Cannot connect to proxy.’, OSError(‘Tunnel connection failed: 403 Forbidden’,)))

6分钟内请求124次,59次有数据返回。

结论:变换IP有效果,但是成功率百分之50,可能和IP质量有关系;
令,加了IP代理后,请求响应时间明显变慢。

搜狗防爬思路总结:

1、IP代理;
2、在被封时更新cookie(输入验证码后的),通过如下页面:

http://www.sogou.com/antispider/?from=/web?query=庆余年&ie=utf8

每输入一次验证码,可以拿到一个新的SNUID。

3、两种方法使用一种即可有效。

4、测试SNUID的时效性,如果够长可以提前构建SNUID池。

5、测试selenium获取cookie是否可以直接用。

破解实验

实验过程:

1、前一天晚上在一台IP可变(半小时变一次)的机器上部署了生成cookie的程序,并记录了cookie生成的时间,把生成的cookie放入redis的list;

2、今天中午11点,用前几天被封的cookie启动搜狗爬虫,发现又可以爬了,但是很快被封,当被封时从redis队列取出昨天放到redis里的cookie,发现马上解封,但是请求5次后又被封,再从redis取新的cookie,又可以继续爬,但是成功次数还是5次。

结论:

1、构造cookie池是个有效的方案,构造方法有两种,一是在改变IP的机器上自动生成cookie,二是通过访问搜狗验证码界面并输入验证码拿到新的cookie,链接如下:

http://www.sogou.com/antispider/?from=/web?query=庆余年&ie=utf8

2、每次换cookie后只能请求成功5次(间隔1s),而之前实验表明,不加cookie时只切IP也能解封,从而猜测搜狗也是cookie和IP同时监测,只不过没那么严格,至少切了cookie可以马上解封,所以可以继续尝试加上代理进行优化(延缓被封时间);

不过如果cookie池够大,即使5次被封,马上换cookie,也丝毫不影响效率;

3、被封的cookie过段时间可以解封,所以cookie池的cookie用完可以放队尾,并记录上次使用时间,便于通过下一次取cookie时判断和上次使用时间间隔来决定是否使用。

4、还需要考证一个cookie是否会过期,从而判断是否可以构建无限大cookie池,考证方法是,初步定一个间隔,比如取cookie时判断和上次使用时间间隔大于24小时才可以使用,如果遇到访问失败的cookie,加到失效cookie队列,再过一段时间,判断失效cookie队列的cookie是否还能使用,多次试验都不能使用,则说明cookie不是永久可以使用,反之亦然。

破解思路资料

https://www.jianshu.com/p/49422e2dd5a3
http://www.imooc.com/article/268611

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值