从BeautifulSoup对象打印文本,不包括某些标记?[Python 2.7]

2024-06-16 09:41:00 发布

您现在位置:Python中文网/ 问答频道 /正文

如果您有一个BS对象,例如:

>>> print soup
<div>
   Peter Griffin
   <br>
   Lois Griffin
   <br>
   Chris Griffin
   <br>
   <div> Meg Griffin </div>
   <br>
   Stewie Griffin
   <br>
<div>

您如何打印soup.text而不包括内部<div>内的所有内容?在

我想要的输出是:

^{pr2}$

干杯!在


Tags: 对象textbrdiv内容bschrispeter
2条回答

使用一个构建在Python stdlib模块上的类。。。在

from HTMLParser import HTMLParser

class HTML_tag_stripper(HTMLParser):
    def __init__(self):
        self.reset()
        self.fed = []
    def handle_data(self, d):
        self.fed.append(d)
    def get_data(self):
        return ''.join(self.fed)

def strip_tags(html):
    s = HTML_tag_stripper()
    s.feed(html)
    return s.get_data()

>>> print strip_tags( str(soup) )

一个选项可以是删除内部<div>标记,并在删除多余空格后打印soup的文本:

for tag in soup.select('div div'):
    tag.clear()
print('\n'.join(re.split(r'\s*\n+\s*', soup.text.strip())))

它产生:

^{pr2}$

相关问题 更多 >