BeautifulSoup -- 防止标签自动闭合

2 投票
1 回答
819 浏览
提问于 2025-04-16 19:40

BeautifulSoup在解析以下代码时遇到了问题:

>>> soup = BeautifulSoup('<img src="#" alt="Click Here >" border="0" />')
>>> soup.prettify()
'<img src="#" alt="Click Here &gt;" />\n" border="0" />\n'

我还想说明一下,我无法控制输入的HTML。里面有很多不同的文本和属性,所以我想避免使用正则表达式。

有没有人能建议我怎么让BeautifulSoup在遇到">"符号时,不自动关闭img标签?

编辑 1:我在文档中找到了这个。我能控制BeautifulSoup如何解析IMG标签吗?

编辑 2:我解决了我的问题。在调用BeautifulSoup之前,我做了一次文本替换。

text.replace('>"','&gt;"')

1 个回答

0

BeautifulSoup4 这个库已经更新,现在它能更聪明地处理一些情况,解决了之前的问题。如果你把 BeautifulSoup4 更新到最新版本,它会在引号里面忽略 > 这个标签。

soup = BeautifulSoup('<img src="#" alt="Click Here >" border="0" />')
print(soup.img.attrs)
# {'src': '#', 'alt': 'Click Here >', 'border': '0'}
soup.prettify()
# '<img src="#" alt="Click Here &gt;" />\n" border="0" />\n'

这个例子展示了 alt 属性里面正确地包含了 > 字符,而 border 属性也被正确识别了。

撰写回答