写在前面
网站的反爬虫和服务器的反反爬虫策略斗争可以说很丰富了。
为什么要反爬虫?
- 高频率、长时间的访问会给服务器带来较大负载压力,影响正常用户的使用,这一点也容易被用于恶意攻击
user-agent白名单
headers(请求头)字段含义:
headers用以客户端向服务器表明身份
- Accept
- 客户端支持的响应数据类型
- Accept-charset
- 客户端编码
- Accept-encoding
- 客户端支持的响应数据压缩格式
- Host
- 客户端请求的主机名
- Referer
- 客户端从哪个资源访问服务器
- user-agent
- 客户端软件环境
- Cookie
- Connection
- 请求后的链接状态:keep-alive | close
- Date
- 客户端当前请求时间
最好随机生成user-agent1
2
3
4
5
6
7# 建立user-agent列表,每次请求时在其中随机选择
agents = ['Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv,2.0.1) Gecko/20100101 Firefox/4.0.1',
'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)']
headers['User-agent'] = agents[random.randint(0, len(agents))]
- 客户端当前请求时间
IP限制
当客户端请求行为与正常用户差异较大时,eg.高访问频率,同一IP大量访问,这样的异常IP会被服务器加入黑名单1
2
3# 降低访问频次
time.spleep(timeinterval)
# 设置IP代理池
js验证码
可以采用OCR自动识别