我正在AWS上为lambda开发一些代码。
# import libraries
import urllib.request as urllib2
from Packages.bs4 import BeautifulSoup
import time
import Packages.requests as requests
import json
def run(event, context):
try:
# specify the url
quote_page = 'http://money.cnn.com/data/hotstocks/index.html';
page = urllib2.urlopen(quote_page)
soup = BeautifulSoup(page, 'html.parser')
tickers = soup.find_all('a', attrs={'class':'wsod_symbol'})
# api end point http://127.0.0.1:8000/api/TopStock/
for i in range(13,23):
url = 'http://127.0.0.1:8000/api/TopStock/'
headers = {'Content-Type': 'application/json'}
data = {
"ticker": tickers[i].text,
"date": str(time.strftime("%Y-%m-%d"))
}
response = requests.post(url, data=json.dumps(data), headers=headers)
print(response.text)
print( data )
return dict(statusCode=200, body='working')
except Exception as e:
return dict(statusCode=500, body=str(e))
print(run(0,0))
它在我的env管理的anaconda上运行良好。
from bs4 import BeautifulSoup
我已导出包并在项目中运行它
from Packages.bs4 import BeautifulSoup
但是我遇到了这个问题
无法找到具有您请求的功能的树构建器: html.parser。您需要安装解析器库吗?
我试过了
无法让它发挥作用:(
运行python 3.5
答案 0 :(得分:2)
我也在为Lambda开发代码时遇到了这个问题。我正在使用部署包,因此我的项目目录如下所示: my Lambda function
vendors/bs4/builder/__init__.py
具有硬编码参考this_module = sys.modules['bs4.builder']
this_module = sys.modules['vendors.bs4.builder']
其中vendors
是我的第三方软件包目录的名称vendors.
的{{1}}导入添加了
bs4
。如果您使用其他解析器(例如bs4/builder/_htmlparser
或lxml
如果使用类似Apex的东西,则可以将这两个命令添加到html5lib
中的构建挂钩中,以自动执行上述步骤。
function.json
sed -i -e 's/bs4.builder/vendors.bs4.builder/g'
./vendors/bs4/builder/__init__.py
答案 1 :(得分:1)
为AWS Lambda创建一个部署包,如其文档https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html中所述。
在您的本地环境中,anaconda负责设置所有包裹。但是在AWS上,只有在部署包中存在外部包BeautifulSoup
时才能调用它们。