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

如何使用Python requests复刻curl批量下载多范围参数文件功能?

问题核心原因

你用到的[x-y]范围语法是curl工具原生支持的批量请求扩展能力,Python的requests库不会自动解析这种语法,你原来的写法只会发送1次参数为字符串[66-900]、[7-444]的请求,自然不会得到预期的批量下载结果。

正确实现方案
  • 手动遍历两个参数的所有取值范围,循环发起请求
  • 每次请求完成后将响应内容写入本地文件,用参数值区分文件名避免覆盖

完整可运行代码示例:

import requests
import time

# 替换为你从Firefox复制的完整请求头,所有参数都要补全避免被站点拦截
headers = {
    'User-Agent': '替换为实际请求头里的UA值',
    # 其余Accept、Referer等头参数都按curl里的内容补充在这里
}

# 替换为实际的PHPSESSID
cookies = {
    'PHPSESSID': '你的实际phpsessid值',
}

# 遍历store_id范围:range左闭右开,所以结束值要加1
for store_id in range(66, 901):
    # 遍历page范围
    for page in range(7, 445):
        params = {
            'store_id': store_id,
            'page': page
        }
        try:
            response = requests.get(
                'http://website.com/shop.php',
                headers=headers,
                params=params,
                cookies=cookies,
                timeout=30
            )
            # 校验请求是否成功
            response.raise_for_status()
            # 自定义文件名,避免重复覆盖,可根据自己需求调整命名规则
            file_name = f"store_{store_id}_page_{page}.html"
            # 二进制写入兼容所有文件类型(文本、图片、压缩包等)
            with open(file_name, 'wb') as f:
                f.write(response.content)
            print(f"已保存:{file_name}")
            # 可选:加0.5-1秒延迟,避免请求太频繁被站点封禁
            time.sleep(0.5)
        except Exception as e:
            print(f"下载store_id={store_id}, page={page}失败:{str(e)}")
额外注意事项
  • 如果下载的是大文件,可以给requests.get加stream=True参数,逐块写入避免占用过多内存
  • 如果需要和curl -O 参数逻辑完全一致,使用服务器返回的原始文件名,可以从响应头Content-Disposition字段提取,新手可以先跑通上述基础版本再做优化
  • 后续如果需要提升下载速度,可以再改造成多线程/协程版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:45:02