爬虫需综合运用IP代理轮换、验证码识别、请求头与行为模拟及JS逆向四类技术绕过反爬。IP代理池应选HTTPS支持的付费或自建服务;验证码优先调用打码平台API;User-Agent等请求头须轮换并控制请求频率;JS动态参数需通过浏览器分析后用PyExecJS或Playwright执行。
IP被封、验证码弹窗、请求被拒——这些是写爬虫时最常遇到的反爬“拦路虎”。光靠requests发请求已经不够,得学会用IP代理轮换和验证码识别来绕过限制。核心思路就两条:让服务器觉得你不是机器人,且每次访问像不同用户。
单个IP高频访问必然触发风控,代理池能分散请求来源。免费代理不稳定,建议用付费服务(如快代理、芝麻代理)或自建代理池(通过云服务器+ Squid 代理软件)。
使用时注意三点:
示例代码片段:
proxies = {"http": "http://user:pass@host:port", "https": "http://user:pass@host:port"}常见验证码分三类:数字字母组合(易识别)、滑块验证(需模拟拖动)、点选文字(需OCR+坐标定位)。入门推荐先攻第一种。
主流方案有三种:
关键细节:验证码图片通常带干扰线/扭曲,预处理比识别本身更重要;识别后务必校验长度和字符范围(如只含数字和大写字母)。
代理和验证码只是表层,真实用户行为才是重点。光换IP不换User-Agent,照样被秒封。
至少做到以下四点:
注意:Selenium虽强,但慢且易被检测(window.navigator.webdriver为True),可用undetected-chromedriver或手动patch规避。
很多网站的URL参数、cookie或headers由前端JS动态生成(比如sign、token、timestamp),直接抓包看不到逻辑。
解决路径分两步:
小技巧:在Chrome控制台里右键“Copy as cURL”,再转成Python requests代码,能快速还原真实请求结构。