Day 1
小张想要某站上所有的电影,写了标准的爬虫(基于 HttpClient),不断地遍历某站的电影列表页面,根据 Html 分析电影名字存进自己的数据库。这个站点的运维小厮发现某个时间段请求量陡增,分析日志发现都是 IP(1.1.1.1)这个用户,并且 userAgent 还是 JavaClient1.6 ,基于这两点判断非人类后直接在Nginx 服务器上封杀。
Day 2
小张电影只爬了一半,于是也针对性的变换了下策略:
- useragent 模仿谷歌的(“User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36”)
- IP每爬半个小时就换一个IP代理。小厮也发现了对应的变化,于是在 Nginx 上设置了一个频率限制,每分钟超过120次请求的再屏蔽IP。 同时考虑到谷歌家的爬虫有可能会被误伤,想想市场部门每月几十万的投放,于是写了个脚本,通过 hostname 检查下这个 ip 是不是真的谷歌家的,对这些 ip 设置一个白名单。
Day 3
小张发现了新的限制后,想着我也不急着要这些数据,留给服务器慢慢爬吧,于是修改了代码,随机1-3秒爬一次,爬10次休息10秒,每天只在8-12,18-20点爬,隔几天还休息一下。小厮看着新的日志头都大了,再设定规则不小心会误伤真实用户,于是准备换了一个思路,当3个小时的总请求超过50次的时候弹出一个验证码弹框,没有准确正确输入的话就把 IP 记