Disons que j'ai un HTML avec <p>
y <br>
tags à l'intérieur. Ensuite, je vais dépouiller le HTML pour nettoyer les balises. Comment puis-je les transformer en sauts de ligne ?
J'utilise l'outil Python BelleSoupe bibliothèque, si ça peut aider.
Disons que j'ai un HTML avec <p>
y <br>
tags à l'intérieur. Ensuite, je vais dépouiller le HTML pour nettoyer les balises. Comment puis-je les transformer en sauts de ligne ?
J'utilise l'outil Python BelleSoupe bibliothèque, si ça peut aider.
En l'absence de précisions, il est difficile d'être sûr que cela fait exactement ce que vous voulez, mais cela devrait vous donner une idée... cela suppose que vos balises b sont enveloppées dans des éléments p.
from BeautifulSoup import BeautifulSoup
import six
def replace_with_newlines(element):
text = ''
for elem in element.recursiveChildGenerator():
if isinstance(elem, six.string_types):
text += elem.strip()
elif elem.name == 'br':
text += '\n'
return text
page = """<html>
<body>
<p>America,<br>
Now is the<br>time for all good men to come to the aid<br>of their country.</p>
<p>pile on taxpayer debt<br></p>
<p>Now is the<br>time for all good men to come to the aid<br>of their country.</p>
</body>
</html>
"""
soup = BeautifulSoup(page)
lines = soup.find("body")
for line in lines.findAll('p'):
line = replace_with_newlines(line)
print line
En exécutant ceci, on obtient...
(py26_default)[mpenning@Bucksnort ~]$ python thing.py
America,
Now is the
time for all good men to come to the aid
of their country.
pile on taxpayer debt
Now is the
time for all good men to come to the aid
of their country.
(py26_default)[mpenning@Bucksnort ~]$
Il s'agit d'une version python3 de la réponse de @Mike Pennington (elle est très utile), j'ai fait une refactorisation légère.
def replace_with_newlines(element):
text = ''
for elem in element.recursiveChildGenerator():
if isinstance(elem, str):
text += elem.strip()
elif elem.name == 'br':
text += '\n'
return text
def get_plain_text(soup):
plain_text = ''
lines = soup.find("body")
for line in lines.findAll('p'):
line = replace_with_newlines(line)
plain_text+=line
return plain_text
Pour l'utiliser, il suffit de passer l'objet Beautifulsoup à la méthode get_plain_text.
soup = BeautifulSoup(page)
plain_text = get_plain_text(soup)
J'utilise la petite bibliothèque suivante pour y parvenir :
https://github.com/TeamHG-Memex/html-text
pip install html-text
Aussi simple que ça :
>>> import html_text
>>> html_text.extract_text('<h1>Hello</h1> world!')
'Hello\n\nworld!'
Je ne suis pas tout à fait sûr de ce que vous essayez d'accomplir, mais si vous essayez simplement de supprimer les éléments HTML, j'utiliserais un programme tel que Bloc-notes2 et utilisez la fonction Remplacer tout - je pense que vous pouvez également insérer une nouvelle ligne en utilisant Remplacer tout. Assurez-vous que si vous remplacez le <p>
que vous supprimez également la fermeture ( </p>
). En outre, pour votre information, le bon HTML5 est le suivant <br />
au lieu de <br>
mais ça n'a pas vraiment d'importance. Python ne serait pas mon premier choix pour cela, donc c'est un peu en dehors de mon domaine de connaissance, désolé de ne pas pouvoir vous aider davantage.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.