使用BeautifulSoup处理前标记中的尖括号

问题描述

我有一个这样的字符串

html = "<pre>City_<cityname>_001</pre>"

尝试使用BeautifulSoup 4解析时,使用以下代码

>>> from bs4 import BeautifulSoup
>>> html = "<pre>City_<cityname>_001</pre>"
>>> soup = BeautifulSoup(html, "html.parser")
>>> soup
<pre>City_<cityname>_001</cityname></pre>
>>> soup.text
City__001

可以看到,BeautifulSoup将cityname视为新标签。

有没有什么方法可以避免这种情况,以获取正确的文本和html?


解决方案

注释被解析器忽略。您可以在分析前将<pre>的内容设为注释,然后再将extract()设为注释。

import bs4
html = "<pre>City_<cityname>_001</pre>"
soup = bs4.BeautifulSoup(html.replace("<pre>","<pre><!--").replace("</pre>","--></pre>"), "lxml")
pre=soup.find('pre')
pre_comment=pre.find(text=lambda text: isinstance(text, bs4.Comment)).extract()
print(pre_comment)

输出:

City_<cityname>_001

相关文章