Entfernen Sie alle Inline-Stile mit BeautifulSoup

8

Ich mache etwas HTML-Reinigung mit BeautifulSoup. Noob zu beiden Python & amp; BeautifulSuppe. Ich habe Tags, die korrekt wie folgt entfernt werden, basierend auf einer Antwort, die ich anderswo auf Stackoverflow gefunden habe:

%Vor%

Aber wie können Sie Inline-Stile entfernen? Zum Beispiel das Folgende:

%Vor%

Sollte werden:

%Vor%

So löschen Sie die Inline-Klasse, ID, Name & amp; Stilattribute aller Elemente?

Antworten auf andere ähnliche Fragen Ich könnte alle erwähnt mit einem CSS-Parser, um dies zu tun, anstatt BeautifulSoup, aber da die Aufgabe ist einfach zu entfernen, anstatt die Attribute zu manipulieren, und ist eine allgemeine Regel für alle Tags, war ich in der Hoffnung, einen Weg zu finden, alles in BeautifulSoup zu tun.

    
Ila 18.10.2012, 16:27
quelle

4 Antworten

25

Sie müssen kein CSS analysieren, wenn Sie nur alles entfernen möchten. BeautifulSoup bietet eine Möglichkeit, ganze Attribute wie folgt zu entfernen:

%Vor%

Wenn Sie nur ganze Tags (und deren Inhalt) löschen möchten, benötigen Sie nicht extract() , wodurch das Tag zurückgegeben wird. Sie brauchen nur decompose() :

%Vor%

Kein großer Unterschied, aber etwas anderes, das ich beim Betrachten der Dokumente gefunden habe. Weitere Details zur API finden Sie in der BeautifulSoup-Dokumentation mit vielen Beispielen.

    
jmk 18.10.2012, 16:41
quelle
7

Ich würde das nicht in BeautifulSoup machen - Sie werden viel Zeit damit verbringen, Randfälle zu testen, zu testen und zu bearbeiten.

Bleach macht genau das für Sie. Ссылка

Wenn Sie dies in BeautifulSoup tun würden, würde ich vorschlagen, dass Sie mit der "Whitelist" -Ansatz gehen, wie Bleach tut. Entscheiden Sie, welche Tags welche Attribute haben sollen, und entfernen Sie alle Tags / Attribute, die nicht übereinstimmen.

    
Jonathan Vanasco 18.10.2012 16:47
quelle
1

Basierend auf der jmk-Funktion verwende ich diese Funktion, um Attribute auf Basis einer weißen Liste zu entfernen:

Arbeite in python2, BeautifulSoup3

%Vor%     
LaputaPrince 26.07.2013 21:33
quelle
0

Hier ist meine Lösung für Python3 und BeautifulSoup4:

%Vor%

Es unterstützt eine Whitelist von Attributen, die beibehalten werden sollen. :) Wenn keine Whitelist angegeben wird, werden alle Attribute entfernt.

    
techouse 01.04.2016 13:19
quelle

Tags und Links