过滤HTML文档中的所有内部文本

时间:2014-03-31 20:30:35

标签: python html beautifulsoup

我想要一个大的HTML文档,我想删除所有标记之间的所有内部文本。我似乎发现的一切只是从HTML中提取文本。我想要的只是原始HTML标签,其属性完好无损。如何过滤掉文本呢?

1 个答案:

答案 0 :(得分:1)

在每个文本元素上查找包含soup.find_all(text=True).extract()的所有文字,将其从文档中删除:

for textelement in soup.find_all(text=True):
    textelement.extract()

演示:

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('''\
... <html><body><p>Hello world!<p>
... <div><ul><li>This is all
... </li><li>Set to go!</li></ul></div>
... </body></html>''')
>>> soup
<html><body><p>Hello world!</p><p>
</p><div><ul><li>This is all
</li><li>Set to go!</li></ul></div>
</body></html>
>>> for textelement in soup.find_all(text=True):
...     textelement.extract()
... 
u'Hello world!'
u'\n'
u'This is all\n'
u'Set to go!'
u'\n'
>>> print soup.prettify()
<html>
 <body>
  <p>
  </p>
  <p>
  </p>
  <div>
   <ul>
    <li>
    </li>
    <li>
    </li>
   </ul>
  </div>
 </body>
</html>