从美丽汤对象打印文本,不包括某些标签?[Python 2.7]



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

干杯!

一种选择是删除内部<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
使用基于

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) )

最新更新