You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Requests下载文件遭反爬拦截,如何模拟浏览器绕过?

解决requests请求被识别为爬虫的问题

伪装成浏览器完全可行,只加User-Agent远远不够——网站通常会检查多维度的请求特征,以下是具体操作方案:

  • 补全完整请求头
    浏览器发送请求时会附带一堆额外头信息,你可以用浏览器F12开发者工具,抓取正常下载文件时的请求头,把Accept、Accept-Language、Accept-Encoding、Referer、Connection这些字段全部复制到代码里。示例代码:

    import requests
    from io import BytesIO
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
        "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
        "Accept-Encoding": "gzip, deflate, br",
        "Referer": "填写你触发下载的页面URL",
        "Connection": "keep-alive",
        "Upgrade-Insecure-Requests": "1"
    }
    
    r = requests.get(url, headers=headers, allow_redirects=True)
    # 先验证响应状态和内容类型
    print(r.status_code)
    print(r.headers.get('Content-Type'))
    
    bts = BytesIO(r.content)
    
  • 维持会话Cookie
    很多网站靠Cookie识别合法会话,你可以用两种方式处理:

    1. 直接从浏览器开发者工具的Storage面板复制Cookie,加到headers的Cookie字段里;
    2. 用requests.Session()先访问一遍下载页面,再发起下载请求,自动维持会话:
    import requests
    from io import BytesIO
    
    session = requests.Session()
    # 先访问下载所在页面,获取会话Cookie
    session.get("下载页面的URL", headers=headers)
    # 再执行下载请求
    r = session.get(url, headers=headers)
    bts = BytesIO(r.content)
    
  • 用浏览器审查功能找解决方案
    这是最直接的方法,步骤如下:

    1. 打开浏览器F12,切换到Network标签,清空现有请求记录;
    2. 在浏览器里正常点击下载文件,找到对应的请求(大小接近800KB的GET请求);
    3. 查看该请求的Headers标签,复制全部Request Headers到代码中;
    4. 检查Response标签,确认返回的是文件内容而非HTML;
    5. 留意是否有重定向,requests默认允许重定向,但特殊跳转可能需要手动处理。

另外注意控制请求频率,模拟人类操作的间隔,避免触发频率限制。

内容的提问来源于stack exchange,提问作者egodial

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 13:54:20