【问题标题】:import error due to bs4 vs BeautifulSoup由于 bs4 与 BeautifulSoup 导致的导入错误
【发布时间】:2012-12-12 02:18:45
【问题描述】:

我正在尝试使用beautifulsoup 兼容lxml,但它给了我一个错误:

from lxml.html.soupparser import fromstring
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Python/2.7/site-packages/lxml/html/soupparser.py", line 7, in <module>
    from BeautifulSoup import \
ImportError: No module named BeautifulSoup

我安装了bs4。我该如何解决这个问题?

【问题讨论】:

标签: python beautifulsoup lxml bs4


【解决方案1】:

该错误是由soupparser.py 在您安装了版本 4 时尝试导入 BeautifulSoup 版本 3 引起的。在版本 4 中,模块名称从 BeautifulSoup 更改为 bs4

在导入soupparser 之前,您可以通过将bs4 模块映射到sys.modules 中的BeautifulSoup 来欺骗soupparser.py 导入版本4:

import sys, bs4
sys.modules['BeautifulSoup'] = bs4

from lxml.html.soupparser import fromstring

【讨论】:

  • soupparser 在 bs4 上能正常工作吗?如果是这样,为什么它仍然使用旧版本?我们是否应该去更改soupparser以尝试将bs4作为BeautifulSoup导入,然后仅在失败时才导入BeautifulSoup?假设 soupparser.py 可以在 lxml 的 Github 存储库中进行修改,那么为未来的用户进行更改和消除这个问题应该是微不足道的,对吧?
  • Soupparser 现在移植到 bs4。请参阅单独的答案。
【解决方案2】:

现在有一个可以与 bs4 一起使用的 soupparser 版本。它可以在这里找到:https://github.com/lxml/lxml/blob/master/src/lxml/html/soupparser.py

【讨论】:

    【解决方案3】:

    尝试添加:

    from bs4 import BeautifulSoup

    并确保为您的系统安装了正确版本的BeautifulSoup

    【讨论】:

    • 我安装了 beautifulsoup 版本 4,所以 from bs4 import BeautifulSoup 效果很好,但 lxml.html.soupparser 使用 beautifulsoup 3 并且有来自 BeautifulSoup import xyz 的声明。
    猜你喜欢
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2015-04-22
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多