在Amazon Lambda(Python3.6)中运行BeautifulSoup与Selenium可行吗?如何实现?
在Amazon Lambda(Python 3.6)运行BeautifulSoup + Selenium的方案
当然可行!我之前帮不少开发者搞定过在Lambda上运行Selenium配合BeautifulSoup抓取JS动态内容的场景,刚好适配你指定的Python 3.6环境,下面给你一步步拆解操作流程:
一、核心前提说明
Lambda默认的Python 3.6环境没有预装Selenium、浏览器驱动以及BeautifulSoup4,所以我们需要自行打包这些依赖,并且要注意必须在Linux环境下打包(Lambda运行在Amazon Linux 2系统上),否则直接在Windows/macOS安装的依赖会因为系统架构不兼容而报错。
二、步骤1:准备依赖包和浏览器组件
- 创建一个本地打包目录,比如
lambda_package - 安装Python依赖:
# 安装BeautifulSoup4到打包目录 pip install beautifulsoup4 -t ./lambda_package # 安装适配Python3.6的Selenium版本(Selenium 4.x部分版本不再支持Python3.6,建议用3.141.0这个稳定版) pip install selenium==3.141.0 -t ./lambda_package - 下载适配Amazon Linux的Chrome组件:
- 下载headless Chrome二进制文件(Lambda只能运行无界面浏览器),选择适合Amazon Linux 2的版本(比如Chrome 90+系列)
- 下载对应版本的ChromeDriver(必须和Chrome版本严格匹配)
- 把Chrome二进制文件和ChromeDriver都放到
lambda_package目录里,并重命名方便调用(比如chrome和chromedriver),还要给它们添加执行权限:chmod +x ./lambda_package/chrome ./lambda_package/chromedriver
三、步骤2:编写Lambda函数代码
创建lambda_function.py,放到lambda_package目录下,示例代码如下:
import os from selenium import webdriver from selenium.webdriver.chrome.options import Options from bs4 import BeautifulSoup def lambda_handler(event, context): # 配置Chrome选项,适配Lambda环境 chrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_argument('--disable-gpu') chrome_options.binary_location = os.path.join(os.getcwd(), 'chrome') # 初始化ChromeDriver driver = webdriver.Chrome( executable_path=os.path.join(os.getcwd(), 'chromedriver'), options=chrome_options ) try: # 访问目标网页,等待JS加载(可根据需求添加显式等待优化) driver.get("https://your-target-url.com") # 获取渲染后的页面源码 page_source = driver.page_source # 用BeautifulSoup解析页面 soup = BeautifulSoup(page_source, 'html.parser') # 这里写入你的解析逻辑,比如提取动态生成的内容 target_data = soup.find_all('div', class_='dynamic-content') return { 'statusCode': 200, 'data': [item.get_text() for item in target_data] } finally: # 确保关闭浏览器,释放Lambda资源 driver.quit()
四、步骤3:打包并部署到Lambda
- 进入
lambda_package目录,把所有文件打包成zip包:
注意:不要把cd lambda_package zip -r lambda_deploy.zip .lambda_package目录本身打包进去,要把目录里的所有文件(包括依赖、浏览器组件、lambda_function.py)放到zip包的根目录。 - 登录AWS控制台,创建新的Lambda函数:
- 选择运行时为Python 3.6
- 上传刚才生成的
lambda_deploy.zip包 - 设置函数处理程序为
lambda_function.lambda_handler
五、关键注意事项
- 内存与超时设置:Selenium运行需要足够内存,建议设置Lambda内存至少512MB;超时时间根据网页加载速度调整,建议设置30秒以上(比如60秒)。
- 版本匹配:Chrome和ChromeDriver的版本必须严格对应,否则会出现驱动无法启动的错误。
- 依赖兼容性:因为Python 3.6已停止维护,部分新库不再支持,所以BeautifulSoup4建议选择4.9.x及以下的版本(确保兼容Python3.6)。
内容的提问来源于stack exchange,提问作者skysoft999
相关产品推荐
相关产品推荐

