BeautifulSoup: Wie wird der Wert in einem Element durch ein Element-Tag ersetzt?

8

Sagen Sie, dass ich dieses Stück HTML habe:

%Vor%

Wie ersetze ich den ersten "Text" durch ein Ankerelement, so wird das Ergebnis:

%Vor%

Ich möchte im Grunde eine Teilzeichenfolge in einem NavigableString durch ein Tag ersetzen.

    
zer0stimulus 20.04.2012, 01:09
quelle

2 Antworten

10

Ihre Frage besteht aus zwei Teilen:

  1. Den einzelnen NavigableString "Dieser Text ist mein" in einen NavigableString, ein Tag und einen anderen NavigableString verwandeln.

  2. Ersetzen des NavigableString "Dieser Text ist mein" mit den drei neuen Elementen.

Die Antwort auf # 1 hängt von Ihrer Situation ab. Insbesondere hängt es davon ab, wie Sie bestimmen, welcher Teil des Textes verknüpft werden muss. Ich werde einen regulären Ausdruck verwenden, um die Zeichenfolge "text" zu finden:

%Vor%

Nun zu # 2. Das ist nicht so einfach wie es sein könnte, aber es ist definitiv möglich. Drehen Sie zuerst text in eine Tag , die den Linktext enthält:

%Vor%

re.split() hat this und is_my in normale Unicode-Zeichenfolgen umgewandelt. Verwandle sie zurück in NavigableString s, damit sie als Elemente in den Baum zurückkehren können:

%Vor%

Verwenden Sie nun replace_with() und insert_after , um das alte Element durch die drei neuen Elemente zu ersetzen:

%Vor%

Nun sollte Ihr Baum so aussehen, wie Sie es wollen:

%Vor%     
Leonard Richardson 20.04.2012, 02:08
quelle
0

Sie können den Text von NavigableString abrufen, ihn ändern, aus modifiziertem Text ein neues Objektmodell erstellen und dann den alten NavigableString durch dieses Objektmodell ersetzen:

%Vor%     
vvzh 06.03.2014 05:33
quelle

Tags und Links