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

如何在Google Colab(安卓平板)将网页PDF批量上传至AWS S3存储桶

批量上传网页PDF到AWS S3的可行方案

方案一:直接在Google Colab中完成(适合新手,无需Lambda)

你已经能在Colab中抓取PDF链接,直接扩展代码完成上传是最便捷的方式,步骤如下:

1. 安装AWS SDK(boto3)

在Colab单元格中执行:

pip install boto3

2. 配置AWS凭证

Colab提供安全的凭证存储方式,避免硬编码:

  • 点击左侧菜单栏的🔑 Secrets 选项
  • 点击 Add new secret,分别添加:
    • 名称:AWS_ACCESS_KEY_ID,值填你的AWS访问密钥ID
    • 名称:AWS_SECRET_ACCESS_KEY,值填你的AWS秘密访问密钥

在代码中加载凭证并初始化S3客户端:

from google.colab import userdata
import boto3

s3 = boto3.client(
    's3',
    aws_access_key_id=userdata.get('AWS_ACCESS_KEY_ID'),
    aws_secret_access_key=userdata.get('AWS_SECRET_ACCESS_KEY')
)

3. 修改代码实现下载+上传逻辑

替换原打印链接的代码,直接通过字节流上传PDF到S3,无需本地存储:

import requests
import bs4
from google.colab import userdata
import boto3

# 初始化S3客户端
s3 = boto3.client(
    's3',
    aws_access_key_id=userdata.get('AWS_ACCESS_KEY_ID'),
    aws_secret_access_key=userdata.get('AWS_SECRET_ACCESS_KEY')
)

DOMAIN = "https://www.conab.gov.br"
URL = "https://www.conab.gov.br/info-agro/analises-do-mercado-agropecuario-e-extrativista/analises-do-mercado/historico-de-conjunturas-de-cafe"
filetype ='download'
BUCKET_NAME = "你的S3存储桶名称"  # 替换为你的实际桶名

def get_soup(url):
  return bs4.BeautifulSoup(requests.get(url).text, 'html.parser')

for link in get_soup(URL).find_all('a'):
  pdf_link = link.get('href')
  if filetype in pdf_link:
    pdf_file_url = DOMAIN + pdf_link
    # 从URL提取文件名
    filename = pdf_file_url.split('/')[-1]
    print(f"处理文件: {filename}")
    
    # 下载PDF字节流
    response = requests.get(pdf_file_url, stream=True)
    response.raise_for_status()  # 捕获请求错误
    
    # 上传到S3
    s3.upload_fileobj(
        response.raw,
        BUCKET_NAME,
        filename  # 可自定义S3中的路径,比如"cafe-reports/" + filename
    )
    print(f"{filename} 已成功上传到S3")

关键注意事项

  • 确保你的AWS IAM用户拥有s3:PutObject权限,且权限策略已关联到该用户
  • 若遇权限错误,检查IAM策略是否允许访问目标存储桶

方案二:修复Lambda的bs4层问题(若坚持使用Lambda)

之前添加bs4层报错,多因打包方式错误,正确步骤如下:

1. 正确打包依赖层

在Colab或本地创建依赖目录并打包:

mkdir python
pip install bs4 requests -t python/
cd python
zip -r bs4-requests-layer.zip .

注意:zip包根目录需直接包含bs4、requests等文件夹,不能嵌套。

2. 创建Lambda层并关联函数

  • 登录AWS控制台,进入Lambda层管理页面,创建新层,上传上述zip包,选择与Lambda函数一致的Python运行时版本(如Python 3.10)
  • 在目标Lambda函数的"层"配置中添加该层

Lambda函数示例代码

import requests
import bs4
import boto3

s3 = boto3.client('s3')
DOMAIN = "https://www.conab.gov.br"
URL = "https://www.conab.gov.br/info-agro/analises-do-mercado-agropecuario-e-extrativista/analises-do-mercado/historico-de-conjunturas-de-cafe"
filetype ='download'
BUCKET_NAME = "你的S3存储桶名称"

def lambda_handler(event, context):
    def get_soup(url):
        return bs4.BeautifulSoup(requests.get(url).text, 'html.parser')
    
    for link in get_soup(URL).find_all('a'):
        pdf_link = link.get('href')
        if filetype in pdf_link:
            pdf_file_url = DOMAIN + pdf_link
            filename = pdf_file_url.split('/')[-1]
            
            response = requests.get(pdf_file_url, stream=True)
            response.raise_for_status()
            
            s3.upload_fileobj(
                response.raw,
                BUCKET_NAME,
                filename
            )
    return {"statusCode": 200, "body": "PDF批量上传完成"}

Lambda注意事项

  • 确保Lambda执行角色拥有s3:PutObject权限
  • Lambda默认最大执行时间为15分钟,若PDF数量过多需确认总耗时不超限

内容的提问来源于stack exchange,提问作者thi.sampai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:50:01