给 Python 爬虫添加随机 User-Agent 最直接的方法是使用 requests 库配合 fake-useragent 库,在每次请求前动态生成 headers。这适用于大多数基于 HTTP 协议的基础爬虫场景,但无法绕过需要登录态或高级指纹识别的反爬机制。
先说结论:随机 User-Agent 能降低被基础规则封禁的概率,但不能解决所有反爬问题。
- 适合:目标网站仅校验 Header 特征的基础反爬场景。
- 先看:确认请求库是否支持自定义 headers 参数。
- 建议:配合请求频率控制一起使用,单一手段效果有限。
快速处理思路
通过第三方库维护 User-Agent 列表,每次请求时随机抽取一个填入 HTTP 头部的 User-Agent 字段。
pip install fake-useragent为什么会这样
服务器通过识别请求头中的 User-Agent 字段来判断客户端类型,默认 Python 请求库会携带明显的标识。
固定不变的 User-Agent 容易被反爬系统标记为自动化脚本,随机变换可以模拟不同用户浏览器的行为特征,增加识别成本。
分步处理
1. 安装依赖库:在终端执行 pip install fake-useragent 命令。
2. 初始化对象:在代码中导入 fake_useragent 并创建 UserAgent 实例。
3. 动态获取:在循环请求内部,每次调用 ua.random 获取新字符串。
4. 注入请求:将获取的字符串赋值给 headers 字典的 User-Agent 键,传入请求方法。
怎么验证是否生效
使用 httpbin.org/user-agent 作为测试目标,打印响应内容中的 user-agent 字段。
连续运行多次脚本,观察返回的 User-Agent 字符串是否发生变化,若变化则说明随机生效。
常见坑
1. 库更新滞后:fake-useragent 依赖本地文件,长期不更新可能导致 UA 版本过旧。
2. IP 封禁优先:多数网站优先限制 IP 频率,仅更换 UA 无法解决 IP 被封问题。
3. 指纹识别:高级反爬会校验 TLS 指纹或 JS 环境,仅改 UA 无效。
常见问题
随机 User-Agent 能保证不被封吗
不能,这仅能绕过基础校验,高频请求仍会触发 IP 限制或行为分析。
是否需要每次请求都更换 UA
建议每次请求或每个会话更换,避免同一 IP 下长时间使用同一 UA 特征。
参考来源
- fake-useragent, PyPI, https://pypi.org/project/fake-useragent/
- Requests 文档,https://docs.python-requests.org/