Wie wird HTML verschönert, damit die Tag-Attribute in einer einzigen Zeile bleiben?

8

Ich habe dieses kleine Stück Code:

%Vor%

Die Ausgabe des obigen Snippets ist jetzt:

%Vor%

Ich würde gerne herausfinden, wie man die Ausgabe formatiert, so dass es stattdessen dies wird:

%Vor%

Anders gesagt, würde ich gerne HTML-Anweisungen wie <tag attrib1=value1 attrib2=value2 ... attribn=valuen> in einer einzigen Zeile halten, wenn möglich. Wenn ich "wenn möglich" sage, meine ich, ohne den Wert der Attribute selbst zu verfälschen (Wert1, Wert2, ..., Wert).

Ist das mit beautifulsoup4 möglich? Soweit ich in den Dokumenten gelesen habe, scheint es, dass Sie einen benutzerdefinierten Formatierer verwenden können aber ich weiß nicht, wie ich einen benutzerdefinierten Formatierer haben könnte, damit er die beschriebenen Anforderungen erfüllen kann.

BEARBEITEN:

Die @alecxe-Lösung ist ziemlich einfach, scheitert leider in einigen komplexeren Fällen wie der folgenden:

%Vor%

TRACKBACK:

%Vor%     
BPL 19.12.2017, 02:17
quelle

2 Antworten

7

BeautifulSoup hat versucht, die Zeilenumbrüche und mehrere Leerzeichen in den Attributwerten im Eingabe-HTML beizubehalten.

Eine Umgehungslösung wäre , um die Elementattribute zu durchlaufen und sie zu bereinigen, bevor verschönert wird - indem Sie die Zeilenumbrüche entfernen und mehrere aufeinanderfolgende Leerzeichen durch ein einzelnes Leerzeichen ersetzen:

%Vor%

Drucke:

%Vor%

Aktualisieren (um die mehrwertigen Attribute wie class zu adressieren):

Sie müssen nur eine kleine Änderung hinzufügen, die eine spezielle Behandlung für den Fall hinzufügt, wenn ein Attribut vom Typ list ist:

%Vor%     
alecxe 19.12.2017, 02:27
quelle
4

Während BeautifulSoup wird häufiger verwendet, HTML Tidy kann eine bessere Wahl sein, wenn Du arbeitest mit Macken und hast spezifischere Anforderungen.

Nachdem die Bibliothek für Python ( pip install pytidylib ) versuchen, den folgenden Code zu installieren:

%Vor%

tidy.tidy_document gibt ein Tupel mit dem HTML und eventuell aufgetretenen Fehlern zurück. Dieser Code wird

ausgeben %Vor%

Durch Auskommentieren der "show-body-only": True für die zweite Stichprobe.

%Vor%

Siehe weitere Konfiguration für weitere Optionen und Anpassung. Es gibt spezielle Wrapping-Optionen für Attribute, die hilfreich sein können. Wie Sie sehen können, werden leere Elemente nur eine Zeile aufnehmen, und html-ordentlich wird automatisch versuchen Dinge wie DOCTYPE , head und title Tags hinzuzufügen.

    
Carol Chen 28.12.2017 18:08
quelle