Search code examples
pythonbeautifulsoup

How do I keep whitespace in BeautifulSoup.contents


Most examples I find online show how to remove whitespace - but in my case I need to keep it.. I have

html = "I can flip this whole thing with one hand\n               <span>D#m</span>\nThe ringleader man\n<span>A#</span>                           <span>Dm</span>                          <span>A#</span>\nI know~~~~ it's a fact that you'd rather just have some of me instead"
bs = BeautifulSoup(html, 'html.parser')
content = (unicode('').join(unicode(content) for content in bs.contents))

Which I expect to keep the whitespace (the "html" variable contains the contents of a pre tag) -- but it seems to replace multiple spaces with a single space.

How do I keep/get the raw contents of a given beautifulsoup parser?


Solution

  • The html parser seems to only keeps whitespace if the content you are parsing is in a <pre> tag -- in my case, the pre tag was removed. Adding

    html = "<pre>" + html + "</pre>"
    

    preserved the whitespace.