我们有外部网站,那里有下载文件的链接。我想将此文件下载到 s3 存储桶。该网站还要求在下载之前登录。
我们如何使用AWS服务来实现它。我不知道如何连接到外部网站并传递用户名和密码来登录网站,然后单击下载链接以编程方式将文件下载到 s3 存储桶。
任何人都可以告诉我如何实现这个场景吗?以及AWS如何连接外部网站以及连接外部网站时需要采取哪些安全预防措施。
我真的很感谢你的帮助,不要误会我没有提供任何代码片段。
确实在寻找一些见解来理解这个过程。另外,如果您可以参考任何真正有帮助的文档..
谢谢,巴布。
为此,您可以使用 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。