找不到具有您请求的功能的树构建器:html.parser。你需要安装解析器库吗?

时间:2018-04-14 13:47:56

标签: python amazon-web-services pip aws-lambda

我正在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。您需要安装解析器库吗?

我试过了

  • pip install --upgrade lxml
  • brew install libxslt1-dev libxml2 python-dev

无法让它发挥作用:(

  

运行python 3.5

2 个答案:

答案 0 :(得分:2)

我也在为Lambda开发代码时遇到了这个问题。我正在使用部署包,因此我的项目目录如下所示: my Lambda function

vendors/bs4/builder/__init__.py具有硬编码参考this_module = sys.modules['bs4.builder']

  1. 我将其更改为this_module = sys.modules['vendors.bs4.builder'] 其中vendors是我的第三方软件包目录的名称
  2. 我还为vendors.的{​​{1}}导入添加了     bs4。如果您使用其他解析器(例如bs4/builder/_htmlparserlxml
  3. ,请小心更改导入)

如果使用类似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时才能调用它们。