BeautifulSoup html.parser不理解img标签。

3
问题:使用“html.parser”时,BeautifulSoup不能将img标签理解为自闭合标签。
from bs4 import BeautifulSoup
BeautifulSoup('<img src="" alt="" title="" class=""><span>kjrn</span>', 'html.parser')

给我
<img alt="" class="" src="" title=""><span>kjrn</span></img>

但我希望结果是什么。
<img alt="" class="" src="" title=""/><span>kjrn</span>

我无法使用xml解析器。

1个回答

2
请使用 lxml 替代。
soup = BeautifulSoup('<img src="" alt="" title="" class=""><span>kjrn</span>', 'lxml')

输出:

<html><body><img alt="" class="" src="" title=""/><span>kjrn</span></body></html>
和将尝试创建格式良好的文档,这就是为什么您会看到html和body标签的原因。

这里阅读有关解析器的更多信息。

HTML解析器之间也存在差异。如果您向Beautiful Soup提供一个完美格式化的HTML文档,则这些差异不会有影响。一种解析器比另一种解析器快,但它们都会给您提供与原始HTML文档完全相同的数据结构。


非常感谢您的输入。但是由于它添加了额外的<html><body>...</body></html>标签,所以我一开始拒绝了它。 - TheRajVJain
1
你可以通过执行 print("".join([str(item) for item in soup.body.contents])) 来简单地丢弃它。这不是问题。 - Zroq
解决了问题的限制,因此接受了答案。谢谢@Zroq。 - TheRajVJain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接