我正在尝试构建一个python代码来检查字符串是否包含HTML代码。我已经多次尝试使用pip3 install beautifulsoup4
和pip3 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())
感谢任何帮助。 :)
答案 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()
有关。我不知道那可能是什么意思。