我想要实现的目标
使用AWS Lambda来爬取一个网站,并将数据保存在S3上。
我遇到的问题
当我执行Lambda时,出现了以下错误信息。
{ "errorMessage": "无法导入模块'lambda_function':无法从'urllib3.util.ssl_'(/opt/python/urllib3/util/ssl_.py)导入名称'DEFAULT_CIPHERS'", "errorType": "Runtime.ImportModuleError", "requestId": "fb66bea9-cbad-4bd3-bd4d-6125454e21be", "stackTrace": [] }
代码
最简单的Lambda代码如下所示。
import requests
import boto3
def lambda_handler(event, context):
s3 = boto3.client('s3')
upload_res = s3.put_object(Bucket='horserace-dx', Key='/raw/a.html', Body='testtext')
return event
Lambda中添加了一个层。使用以下命令将文件保存在“python”文件夹中,冻结为zip文件,然后作为层上传到AWS Lambda。
!pip install requests -t ./python --no-user
!pip install pandas -t ./python --no-user
!pip install beautifulsoup4 -t ./python --no-user
- 存储桶
horserace-dx
已存在 - 文件夹
raw
已存在 - Lambda 的角色已正确设置。它可以从 S3 读取和写入
- Lambda 的运行时是 Python 3.9。本地计算机的 Python 版本为 3.9.13。
我到目前为止做了什么
我谷歌搜索了 "cannot import name 'DEFAULT_CIPHERS' from 'urllib3.util.ssl_'" 并找到了一些建议。我使用以下代码创建了层并尝试了无效。
!pip install requests -t ./python --no-user
!pip install pandas -t ./python --no-user
!pip install beautifulsoup4 -t ./python --no-user
!pip install urllib3==1.26.15 -t ./python --no-user
那么我应该怎么做才能达到我想要的目标呢?任何建议都将不胜感激。