0

如果您有一个 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>

我想要的输出是:

>>> print <clever_code>
Peter Griffin
Lois Griffin
Chris Griffin
Stewie Griffin

干杯!

4

2 回答 2

1

一种选择可能是删除内部标签并在删除多余空格后<div>打印文本:soup

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

它产生:

Peter Griffin
Lois Griffin
Chris Griffin
Stewie Griffin
于 2013-09-11T21:54:13.063 回答
1

使用基于 Python 标准库中的模块构建的类...

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) )
于 2013-09-11T21:38:52.947 回答