2014-04-13 8 views
6

Ich bin neu bei Python und Beautifulsoup, also vielleicht gibt es eine einfache Antwort, die ich nicht finden kann.python beautifulsoup new_tag: Klasse als Attribut zuweisen

Als ich .new_tag('name') nennen wie ich kann auch Attribute zuweisen .new_tag('a', href='#', id='link1')

Aber ich kann auf diese Weise nicht abtreten Klasse, weil sie Wort reserviert ist. Außerdem kann ich den Namen auf diese Weise nicht hinzufügen, da er als Schlüsselwort für das Tag-Name-Attribut verwendet wird. Ich weiß, dass ich sie später hinzufügen kann, indem ich tag['class'] zum Beispiel verwende, aber ich würde gerne wissen, ist dies die einzige Möglichkeit, neue Tags zu Klassen hinzuzufügen? Oder gibt es einen Weg, dies mit einem einzigen Schritt zu tun?

Antwort

15

Sie sind richtig - Klasse ist ein Python reserviertes Wort und kann nicht als Schlüsselwortargument verwendet werden, weil der Sprachenparser sich beschwert.

Es gibt einen Weg darum - Sie können die Funktion Keyword-Argumente durch ein Wörterbuch geben, dem ** vorausgeht. Auf diese Weise ist "Klasse" nur eine andere Zeichenfolge und kollidiert nicht mit dem reservierten Wort, wenn die Python-Syntax analysiert wird, aber das Schlüsselwortargument wird zur Laufzeit korrekt übergeben.

In Ihrem Fall sollten die Problemumgehung sein -

soup.new_tag('a', href='#', id='link1', **{'class':'classname'}) 

Art hässlich weiß ich, aber es funktioniert ..;)

+1

Ja, das funktioniert! Vielleicht ist mein Wissen über Python zu arm, aber ich habe schon einen solchen Weg versucht, aber es ist fehlgeschlagen. Dein Code funktioniert ziemlich gut. Vielen Dank! –

+0

Gern geschehen! froh, dass ich helfen konnte ;) – itai

Verwandte Themen