J'ai un tas de HTML, je suis analytique avec Beaudsoup et ça va très bien sauf un sprock mineur. Je souhaite enregistrer la sortie dans une chaîne à une seule lignée, avec la sortie suivante comme sortie actuelle: idéalement, j'aimerais P> <li><span class="plaincharacterwrap break">Zazzafooky but one two three!</span></li><li><span class="plaincharacterwrap break">Zazzafooky2</span></li>
4 Réponses :
re.sub('\ {2,}', '', yourstring) re.sub('\n*', '', yourstring)
Voici comment vous pouvez le faire sans expressions régulières:
>>> html = """ <li><span class="plaincharacterwrap break"> ... Zazzafooky but one two three! ... </span></li> ... <li><span class="plaincharacterwrap break"> ... Zazzafooky2 ... </span></li> ... <li><span class="plaincharacterwrap break"> ... Zazzafooky3 ... </span></li> ... """ >>> html = "".join(line.strip() for line in html.split("\n")) >>> html '<li><span class="plaincharacterwrap break">Zazzafooky but one two three!</span></li><li><span class="plaincharacterwrap break">Zazzafooky2</span></li><li><span class="plaincharacterwrap break">Zazzafooky3</span></li>'
Old Question, je sais, mais BelleSoup4 a cet assistant appelé Stripped_strings.
Essayez ceci: p>
description_el = about.find('p', { "class": "description" }) descriptions = list(description_el.stripped_strings) description = "\n\n".join(descriptions) if descriptions else ""
Si vous êtes venu ici après avoir été troublé par Beautiful Plettifier (). Je pense que cette solution n'ajoutera pas d'espaces supplémentaires.
from xml.etree import ElementTree as ET tree = ET.parse('out.html') title = tree.find(".//title").text print(title)
Comment imprimez-vous votre sortie?
Vous pouvez faire ce que font les navigateurs: réduisez tous les espaces adjacents (dans le texte) dans des espaces.