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

如何通过Amazon S3批量下载ArXiv文件及处理请求付费存储桶

解决ArXiv请求付费S3存储桶的文件列表获取与下载问题

1. 获取ArXiv请求付费存储桶中的文件列表

ArXiv的公开S3存储桶名为arxiv,属于请求付费(Requester Pays)类型。要获取其中的文件列表(如src/ArXiv_src_manifest.xml),需通过boto3调用S3接口时指定RequestPayer='requester'参数,否则会返回权限错误。

示例代码:

import boto3

# 初始化S3客户端
s3 = boto3.client('s3')

bucket_name = 'arxiv'
# 目标前缀,比如只查看src目录下的文件
prefix = 'src/'

# 列出前缀下的所有对象
response = s3.list_objects_v2(
    Bucket=bucket_name,
    Prefix=prefix,
    RequestPayer='requester'
)

# 输出文件键名
for obj in response.get('Contents', []):
    print(obj['Key'])

# 验证特定文件是否存在
target_key = 'src/ArXiv_src_manifest.xml'
try:
    s3.head_object(
        Bucket=bucket_name,
        Key=target_key,
        RequestPayer='requester'
    )
    print(f"文件 {target_key} 存在")
except s3.exceptions.ClientError as e:
    print(f"文件 {target_key} 不存在或无法访问: {e}")

说明:

  • 需提前配置AWS凭证(通过~/.aws/credentials文件或环境变量),请求费用会计入你的AWS账号。
  • 若文件数量过多,list_objects_v2会分页返回,需通过NextContinuationToken遍历所有结果。

2. 使用boto3下载存储桶中的文件并设置请求付费参数

下载操作同样需要携带RequestPayer='requester'参数,以下两种方式均可实现:

方法一:直接下载到本地文件

import boto3

s3 = boto3.client('s3')
bucket_name = 'arxiv'
file_key = 'src/arXiv_src_1001_001.tar'
local_save_path = './arXiv_src_1001_001.tar'

# 下载并保存到本地
s3.download_file(
    Bucket=bucket_name,
    Key=file_key,
    Filename=local_save_path,
    ExtraArgs={'RequestPayer': 'requester'}
)

方法二:读取文件内容到内存再写入本地

import boto3

s3 = boto3.client('s3')
bucket_name = 'arxiv'
file_key = 'src/arXiv_src_1001_001.tar'

# 获取文件内容
response = s3.get_object(
    Bucket=bucket_name,
    Key=file_key,
    RequestPayer='requester'
)

# 将内容写入本地文件
with open('./arXiv_src_1001_001.tar', 'wb') as f:
    f.write(response['Body'].read())

关键注意事项:

  • 确保AWS账号有足够权限访问请求付费存储桶。
  • 所有操作产生的请求费用、流量费用均由你的账号承担,批量操作前建议确认定价。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:00:16