从外部网站下载文件到AWS S3存储桶

问题描述 投票:0回答:1

我们有外部网站,那里有下载文件的链接。我想将此文件下载到 s3 存储桶。该网站还要求在下载之前登录。

我们如何使用AWS服务来实现它。我不知道如何连接到外部网站并传递用户名和密码来登录网站,然后单击下载链接以编程方式将文件下载到 s3 存储桶。

任何人都可以告诉我如何实现这个场景吗?以及AWS如何连接外部网站以及连接外部网站时需要采取哪些安全预防措施。

我真的很感谢你的帮助,不要误会我没有提供任何代码片段。

确实在寻找一些见解来理解这个过程。另外,如果您可以参考任何真正有帮助的文档..

谢谢,巴布。

amazon-web-services amazon-s3 aws-api-gateway aws-http-api aws-networking
1个回答
0
投票

为此,您可以使用 Selenium(用于与浏览器进行 Web 交互的 Python 库)来处理登录和下载,并使用 Boto3(AWS SDK)将文件上传到 S3。

您可以简单地使用 Lambda 来完成此操作,或者如果您有一些困难的事情,您可以使用 AWS Batch。那么您只需要 Lambda 或 AWS Batch 能够访问互联网并拥有 S3 存储桶的权限,以便能够将文件上传到那里。

这是一个关于如何执行此操作的小代码片段,例如:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import boto3

def download_and_upload_to_s3():
    # Setup Selenium WebDriver
    options = webdriver.ChromeOptions()
    options.add_argument("--headless")  
    options.add_argument("--no-sandbox") 
    options.add_argument("--disable-dev-shm-usage")  # Required for Lambda
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)

    try:
        # Log in to the website
        website_url = "https://example.com/login"
        username = "your_username"
        password = "your_password"
        driver.get(website_url)

        # Fill in login form
        driver.find_element(By.ID, "username_field_id").send_keys(username)
        driver.find_element(By.ID, "password_field_id").send_keys(password)
        driver.find_element(By.ID, "login_button_id").click()

        driver.get("https://example.com/download/file")

        file_path = "/tmp/downloaded_file"  # Temporary location in Lambda or Batch
        with open(file_path, "wb") as f:
            f.write(driver.page_source.encode("utf-8"))  # Simplified for example; adjust for actual file download.

        s3_client = boto3.client('s3')
        bucket_name = "your-bucket-name"
        s3_key = "path/to/your/file"

        s3_client.upload_file(file_path, bucket_name, s3_key)

    finally:
        driver.quit()

# Run the function
download_and_upload_to_s3()

您不会将 AWS 账户连接到网站,但您宁愿创建一个脚本来下载文件并将其上传到您的 AWS。

© www.soinside.com 2019 - 2024. All rights reserved.