BeautifulSoup4导入错误

时间:2017-12-08 14:49:28

标签: python html python-3.x beautifulsoup importerror

我正在尝试构建一个python代码来检查字符串是否包含HTML代码。我已经多次尝试使用pip3 install beautifulsoup4pip3 install lxml重新安装 BeautifulSoup4 库,它已经向我展示了这一点:

Requirement already satisfied: beautifulsoup4 

但每当我尝试导入beautifulsoup时,都会出现此错误代码:

bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested

如何正确导入 beautifulsoup 库?

以下是代码块:

from bs4 import BeautifulSoup
body = "..."
bool(BeautifulSoup(body, "body.parser").find())

感谢任何帮助。 :)

1 个答案:

答案 0 :(得分:1)

我首先考虑你的查询中的第一句话,'我正在尝试构建一个python代码来检查一个字符串是否包含HTML代码。'

BeautifulSoup很可能是 not 用于此的工具,因为它被设计为几乎任何字符串作为输入,并为该字符串生成解析的HTML结构。

例如,在这里,我输入一个没有标签的字符串,所有和BS都会返回一个完整的页面,甚至为该页面生成一个body元素。

>>> import bs4
>>> s = 'this represents just about any string'
>>> soup = bs4.BeautifulSoup(s, 'lxml')
>>> soup
<html><body><p>this represents just about any string</p></body></html>
>>> soup.find_all('body')
[<body><p>this represents just about any string</p></body>]

这是使用HTMLParser的另一种粗略的方法。 HTMLParser位于标准Python库中。

>>> from html.parser import HTMLParser
>>> class IsItHTML(HTMLParser):
...     def __init__(self):
...         HTMLParser.__init__(self)
...         self.found = False
...     def handle_starttag(self, tag, attrs):
...         self.found = True
...     def __call__(self):
...         return self.found
... 
>>> isitHTML = IsItHTML()
>>> s = 'this represents just about any string'
>>> isitHTML.feed(s)
>>> isitHTML()
False
>>> s = '<body>something</body>'
>>> isitHTML.feed(s)
>>> isitHTML()
True

我对这种方法的主要批评是它涉及遍历HTML输入中的每个标记。

关于您的第二个主要问题:如何正确导入BS?我想你是这么做的。问题似乎与BeautifulSoup(body, "body.parser").find()有关。我不知道那可能是什么意思。