Retirez tous les styles en ligne à l'aide de BeautifulSoup
Je suis en train de faire du code HTML de nettoyage avec BeautifulSoup. Noob de Python & BeautifulSoup. J'ai balises être enlevés correctement comme suit, basé sur une réponse que j'ai trouvé ailleurs sur Stackoverflow:
[s.extract() for s in soup('script')]
Mais comment faire pour supprimer des styles en ligne? Par exemple:
<p class="author" id="author_id" name="author_name" style="color:red;">Text</p>
<img class="some_image" href="somewhere.com">
Devrait devenir:
<p>Text</p>
<img href="somewhere.com">
Comment supprimer la ligne class, id, nom & attributs de style de tous les éléments?
Des réponses à d'autres questions similaires que j'ai pu trouver tout ce qui est mentionné à l'aide d'un parseur CSS pour gérer cela, plutôt que de BeautifulSoup, mais que la tâche est simplement de supprimer plutôt que de manipuler les attributs, et est une règle générale s'appliquant à toutes les balises, j'espérais trouver un moyen de tout faire au sein de BeautifulSoup.
OriginalL'auteur Ila | 2012-10-18
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin d'analyser CSS si vous voulez simplement supprimer tous. BeautifulSoup fournit un moyen de supprimer la totalité des attributs comme:
Aussi, si vous souhaitez simplement supprimer les balises (et leur contenu), vous n'avez pas besoin
extract()
, qui renvoie la balise. Vous avez juste besoindecompose()
:Pas une grande différence, mais juste quelque chose d'autre que j'ai trouvé en regardant les docs. Vous pouvez trouver plus de détails sur l'API de la BeautifulSoup documentation, avec de nombreux exemples.
Du sens. Je vais laisser la remarque à propos de
decompose()
pour quelqu'un d'autre qui pourrait tomber sur cette.OriginalL'auteur jmk
Je ne ferais pas cela dans
BeautifulSoup
- vous allez passer beaucoup de temps à essayer, tester, et de travail autour des cas limites.Bleach
fait exactement ce pour vous. http://pypi.python.org/pypi/bleachSi vous étiez pour ce faire, dans
BeautifulSoup
, je vous suggère d'aller avec la "liste blanche", commeBleach
. Décider lequel des balises peuvent avoir des attributs, et la bande de chaque balise ou un attribut qui ne correspondent pas.L'eau de javel est assez grand. Je l'aime vraiment.
OriginalL'auteur Jonathan Vanasco
Basé sur jmk fonction, j'utilise cette fonction pour supprimer les attributs de base sur une liste blanche:
Travail en python2, BeautifulSoup3
OriginalL'auteur LaputaPrince
Voici ma solution pour Python3 et BeautifulSoup4:
Il prend en charge une liste d'attributs qui doivent être conservés. 🙂 Si aucune liste blanche est fourni tous les attributs sont supprimés.
OriginalL'auteur techouse