【问题标题】:Couldn't find a tree builder with the features you requested: html.parser. Do you need to install a parser library?找不到具有您要求的功能的树生成器:html.parser。您需要安装解析器库吗?
【发布时间】:2018-09-24 16:58:06
【问题描述】:

我正在为 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))

它在我由 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

【问题讨论】:

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


    【解决方案1】:

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

    vendors/bs4/builder/__init__.py 有一个硬编码引用 this_module = sys.modules['bs4.builder']

    1. 我把它改成了this_module = sys.modules['vendors.bs4.builder'] 其中vendors 是我的第 3 方包目录的名称
    2. 我还在 bs4 导入前添加了 vendors. bs4/builder/_htmlparser。如果您使用不同的解析器,例如 lxmlhtml5lib,请注意更改导入

    如果您使用类似Apex 的东西,您可以将这两个命令添加到function.json 中的构建挂钩中,以自动执行上述步骤。

    • sed -i -e 's/bs4.builder/vendors.bs4.builder/g' ./vendors/bs4/builder/__init__.py
    • sed -i -e 's/bs4./vendors.bs4./g' ./vendors/bs4/builder/_htmlparser.py

    【讨论】:

    • 这个问题解决了最初的解析错误,但是,我遇到了一些导入错误。最终为我解决问题的是将所有依赖项安装在项目根目录中,而不是像 vendor/ 之类的目录。这不再需要替换 bs4 中的文本。这让一切都变得有些混乱,但它确实有效。
    • 对我不起作用。我确实很喜欢看到bs4.builder 的评论:我很确定这不是最好的方法。。无论正确的方式是什么——我倾向于同意这一点。
    【解决方案2】:

    按照他们的文档https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html 中的描述为 AWS Lambda 创建一个部署包。

    在您的本地环境中,anaconda 负责设置您的所有软件包。然而,在 AWS 上,像 BeautifulSoup 这样的外部包只有在部署包中存在时才能被调用。

    【讨论】:

    • 这不是缺少美丽的汤似乎是安装了html.parser?当它不是一个包但仍然是一个依赖项时,你如何连接到 html.parser。
    • 太好了。将来,如果您使用的不是来自标准库的导入,那么创建部署包会更有意义。如果您使用大量 Lambda 函数,Gordon 是一个很棒的工具。 github.com/jorgebastida/gordon
    猜你喜欢
    • 2019-05-16
    • 2017-02-28
    • 2017-11-17
    • 2020-07-09
    • 2019-11-07
    • 2020-07-02
    • 2018-06-14
    • 2017-02-20
    相关资源
    最近更新 更多