如果字符串包含html代码,如何用python检测?

新手上路,请多包涵

如何检测字符串是否包含 html(可以是 html4、html5,只是文本中的部分 html)?我不需要 HTML 版本,而是字符串是否只是文本或包含 html。文本通常是多行的,也有空行

更新:

示例输入:

HTML:

 <head><title>I'm title</title></head>
Hello, <b>world</b>

非 HTML:

 <ht fldf d><
<html><head> head <body></body> html

原文由 static 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 965
1 个回答

您可以使用 HTML 解析器,例如 BeautifulSoup 。请注意,它确实尽力解析 HTML,甚至是损坏的 HTML,根据 底层解析器 的不同,它可能非常宽松也可能不太宽松:

 >>> from bs4 import BeautifulSoup
>>> html = """<html>
... <head><title>I'm title</title></head>
... </html>"""
>>> non_html = "This is not an html"
>>> bool(BeautifulSoup(html, "html.parser").find())
True
>>> bool(BeautifulSoup(non_html, "html.parser").find())
False

这基本上是试图在字符串中找到任何 html 元素。如果找到 - 结果是 True

另一个带有 HTML 片段的例子:

 >>> html = "Hello, <b>world</b>"
>>> bool(BeautifulSoup(html, "html.parser").find())
True


或者,您可以使用 lxml.html

 >>> import lxml.html
>>> html = 'Hello, <b>world</b>'
>>> non_html = "<ht fldf d><"
>>> lxml.html.fromstring(html).find('.//*') is not None
True
>>> lxml.html.fromstring(non_html).find('.//*') is not None
False

原文由 alecxe 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题