AWS Lambda只读文件系统下requests_html render无法运行求助
解决AWS Lambda中request_html.render()只读文件系统报错问题
问题根源:request_html的
render()方法底层依赖pyppeteer,pyppeteer默认将下载的Chromium浏览器存储在当前工作目录,而AWS Lambda仅允许向/tmp目录写入文件,触发Read-only file system报错。解决方案:
- 强制修改pyppeteer缓存目录
在Python脚本开头添加环境变量配置,让pyppeteer将Chromium缓存到Lambda可写的/tmp目录:import os # 指定pyppeteer缓存路径到/tmp下的子目录 os.environ['PYPPETEER_CACHE_DIR'] = '/tmp/pyppeteer' - 调整Lambda基础配置
- 内存配置:将Lambda函数内存至少调整为512MB(页面渲染需要较多资源,内存不足易导致超时或崩溃)
- 超时时间:根据目标页面加载复杂度,设置30秒以上的超时时间
- 可选:预打包Chromium到部署包
若不想让Lambda每次运行都下载Chromium,可提前下载对应Linux版本的Chromium并打包到部署包中,再通过参数指定路径:
注:from requests_html import HTMLSession session = HTMLSession() r = session.get('目标网页URL') # 指定打包的Chromium路径,同时添加Lambda运行必需的浏览器参数 r.render(browser_args=['--no-sandbox', '--disable-dev-shm-usage', '--executable-path=/opt/chromium'])--no-sandbox和--disable-dev-shm-usage是Lambda环境下运行Chromium的必需参数,用于规避权限与内存共享限制。
- 强制修改pyppeteer缓存目录
内容的提问来源于stack exchange,提问作者qangdev
相关产品推荐
相关产品推荐

