一、服务器反爬的原因
爬虫占总 PV(页面访问次数)比例较高,会浪费服务器资源,尤其是在高峰期。例如每年三月是爬虫高峰期,大量人员在进行论文数据抓取和舆情分析,导致服务器负载激增。
1. 资源被批量抓取,丧失竞争力
如果数据可以在非登录状态下直接查询,且没有反爬机制,竞争对手可以批量复制信息。长期来看,用户会流失到竞争对手平台,直接影响公司收益。
2. 法律维权成本高
在国内,针对爬虫的法律诉讼存在不确定性,有时成功有时无效。因此,技术手段是保障数据安全的第一道防线。
二、服务器常反什么样的爬虫
1. 低水平的个人爬虫
通常是应届毕业生或初学者编写,逻辑简单粗暴,不考虑服务器压力,容易导致站点崩溃。
2. 创业公司的数据需求
部分初创公司缺乏数据积累,为快速验证业务模型,编写脚本批量爬取数据,不计成本地消耗目标资源。
3. 失控的自动化脚本
某些托管在服务器上的小爬虫因无人维护,即使无法获取有效数据(如 HTTP 200 但内容为空),仍持续运行,浪费带宽。
4. 成熟的商业对手
拥有技术和资金优势,采用分布式代理、模拟浏览器指纹等高级手段,对抗性强。
5. 搜索引擎爬虫
部分搜索引擎爬虫过于激进,高频请求会导致服务器性能下降,类似 DDoS 攻击。
三、反爬虫领域常见概念
- 爬虫:使用技术手段批量获取网站信息的方式。
- 反爬虫:使用技术手段阻止他人批量获取自己网站信息的方式。
- 误伤:将正常用户识别为爬虫。高误伤率会导致用户体验下降,不可接受。
- 拦截率:成功阻止爬虫访问的比例。通常拦截率越高,误伤风险越大,需权衡。
- 资源成本:包括机器成本和人力成本。随着摩尔定律,机器成本降低,而人力成本上升,因此优化代码效率比单纯增加服务器更重要。
四、反爬的三个方向
基于身份识别、基于爬虫行为、基于数据加密。
4.1 基于身份识别进行反爬
1. Headers 字段检测
服务器通过检查请求头判断来源。
- User-Agent:爬虫默认 UA 往往暴露特征。解决方案是使用 User-Agent 池随机切换。
- Referer:检查请求来源是否合法。爬虫常忽略此字段。
- Cookie:检查会话权限。可通过模拟登录获取 Cookie 后爬取。
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Referer': 'https://example.com/login'
}
cookies = {'session_id': 'abc123'}
response = requests.get('https://example.com/data', headers=headers, cookies=cookies)
2. 请求参数检测
服务器检查参数完整性或加密方式。
- :从 HTML 源码中获取。需分析抓包数据,理清请求依赖关系。


