使用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
相关文章