反爬虫策略

写在前面

网站的反爬虫和服务器的反反爬虫策略斗争可以说很丰富了。
为什么要反爬虫?

  • 高频率、长时间的访问会给服务器带来较大负载压力,影响正常用户的使用,这一点也容易被用于恶意攻击

user-agent白名单

headers(请求头)字段含义:

headers用以客户端向服务器表明身份

  • Accept
    • 客户端支持的响应数据类型
  • Accept-charset
    • 客户端编码
  • Accept-encoding
    • 客户端支持的响应数据压缩格式
  • Host
    • 客户端请求的主机名
  • Referer
    • 客户端从哪个资源访问服务器
  • user-agent
    • 客户端软件环境
  • Cookie
  • Connection
    • 请求后的链接状态:keep-alive | close
  • Date
    • 客户端当前请求时间
      最好随机生成user-agent
      1
      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自动识别