当前位置: 首页 > news >正文

《Python爬虫实战:请求伪装与反反爬——从被403到稳拿数据》

一、前言

前两篇讲了怎么发请求、怎么找接口。但有读者跟着跑完发现:一模一样的代码,自己跑就被 403 拦了——因为目标网站有反爬。

这很正常。反爬是爬虫路上绕不过的坎。这篇文章不讲玄学,直接给能用的方法。

二、最常见的三种反爬与应对

1. User-Agent 检测

请求头中的 User-Agent 如同请求的"身份证",服务器通过它可以判断访问者是否为真实浏览器。requests 库默认的 UA 为python-requests/2.x,特征明显,极易被识别为非真人访问。

应对:每次请求换一个常见的浏览器 UA。

2. 请求频率限制

一秒钟发十几二十个请求,服务器直接拉黑 IP。

应对:每次请求之间随机等 1-3 秒。

3. Cookie/Session 检测

有些网站需要先访问首页拿到 Cookie,再访问其他页面才给数据。跳过这一步直接请求详情页,返回空白。

应对:用requests.Session()自动管理 Cookie。

为了方便读者快速定位和解决反爬问题,下面是一个遇到 403 等反爬错误时的排查流程图:

flowchart TD A[请求被拒(403/429等)] --> B{检查 User-Agent} B -->|UA 可疑| C[更换为常见浏览器 UA] B -->|UA 正常| D{检查请求频率} D -->|频率过高| E[添加随机延迟(1-3秒)] D -->|频率正常| F{检查 Cookie/Session} F -->|缺少 Cookie| G[先访问首页获取 Cookie] F -->|Cookie 正常| H[其他原因排查] C --> I[重新发起请求] E --> I G --> I I --> J{是否成功?} J -->|是| K[✅ 请求成功] J -->|否| L[🔄 返回第一步继续排查]

该流程图概括了本文介绍的三种主要反爬机制的排查路径。按照这个顺序检查,可以解决大部分因 UA、频率、Cookie 导致的访问问题。

三、代码实战:带伪装能力的爬虫模板

把上面三种应对手段打包成一个通用工具函数,以后爬任何网站都能复用:

import requests import random import time # 常见的浏览器 User-Agent 池 USER_AGENTS = [ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0", ] def create_session(): """创建一个带伪装能力的请求会话""" session = requests.Session() session.headers.update({ "User-Agent": random.choice(USER_AGENTS), "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", }) return session def safe_request(url, session=None, retries=3): """带重试和延时的安全请求函数""" if session is None: session = create_session() for attempt in range(retries): try: time.sleep(random.uniform(1, 2.5)) response = session.get(url, timeout=10) if response.status_code == 200: return response elif response.status_code == 403: print(f"被拦了(第{attempt+1}次重试)...") session.headers.update({ "User-Agent": random.choice(USER_AGENTS) }) continue else: print(f"状态码异常:{response.status_code}") continue except Exception as e: print(f"请求异常:{e}") continue return None # 使用示例 session = create_session() resp = safe_request("http://books.toscrape.com", session) if resp: print("请求成功!")

四、一个省事的技巧:从浏览器直接复制请求

每次手动写 headers 很麻烦。有个省事的方法:

打开开发者工具(F12)→ Network 标签 → 刷新页面 → 找到请求 → 右键 → Copy → Copy as cURL → 粘贴到 curlconverter.com,直接生成完整的 Python 代码。

Cookie、Referer 全部自动带好,比自己写省事十倍。

五、总结

反爬不可怕,常见的手段就那几样。核心就三点:

  1. 换 UA —— 别让服务器认出你是爬虫
  2. 慢一点 —— 别把自己刷进黑名单
  3. 管好 Cookie —— 模拟正常用户浏览流程

掌握了这三招,大部分网站都能安安稳稳地爬。

技术交流详见主页简介~

版权声明:​本文为CSDN博主「轩&hyx」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

http://www.jsqmd.com/news/1128476/

相关文章:

  • 煤矿井下全域视频孪生监管技术白皮书
  • 终极Altium Designer元件库指南:免费资源快速上手
  • AI生成中文图片文字错乱?解析扩散模型与中文处理的底层瓶颈
  • AI 编译缓存:命中同一张图之前,先确认输入形状稳定
  • FPGA 工频同步采集 + DDR3 缓存完整实现方案
  • RectTransform:为 UI 而生的那副骨架
  • Flask 后端时间处理 3 大实战场景:datetime、字符串与SQL查询参数转换
  • Eclipse Ditto 物模型搭建
  • Claude Code 会话分支,给探索留一条安全岔路
  • 基于 Spring Boot + Hyperledger Fabric 的数字版权交易与链上存证系统
  • 《龙之家族第三季》 美剧|在线观看|夸克|下载|第一集
  • langchain 内置中间件详解 -HumanInTheLoopMiddleware — 人工审批
  • 专业指南:如何让你的老款Mac电脑免费升级到最新macOS系统
  • 大模型量化部署:从 INT8 到 4-bit 的工程演进
  • Postman+Jenkins接口测试持续集成实战:从零搭建自动化流水线
  • OpenWrt SSH双因素认证配置指南:TOTP与备用端口方案
  • 奇迹 MU 剑与翼手游官网下载:奇迹 MU 剑与翼最新官方下载渠道
  • 仲景中医AI模型:3步快速部署你的智能辨证论治助手
  • 三步解锁网盘极速下载:智能解析工具全攻略
  • 红外光伏板缺陷检测 光伏数据集 AI红外光伏板识别 训练模型
  • Transformer的核心——注意力机制
  • 泳池设备品牌哪家好
  • 基于MATLAB图像处理的药片检测与计数系统设计与实现
  • 【OpenCV】 Haar级联分类器实现静态图片人脸检测(附完整代码)
  • 如何用m4s-converter将B站缓存视频永久保存为MP4格式?
  • 暗黑破坏神2存档编辑器:5分钟掌握免费可视化修改工具
  • 抖店微信小店流量核心打法:标题优化、主图整改、质量分提升全套步骤
  • SSTI(第六周)
  • 3分钟上手NSC_BUILDER:Switch游戏文件管理的终极解决方案
  • Self-XSS攻击深度解析:从社交工程陷阱到纵深防御实践