2014-04-13 11 views
6

Jestem nowy zarówno dla Pythona, jak i beautifulsoup, więc być może istnieje prosta odpowiedź, której nie mogę znaleźć.python beautifulsoup new_tag: przypisz klasę jako atrybut

Kiedy zadzwonić .new_tag('name') ja również może przypisać atrybuty jak .new_tag('a', href='#', id='link1')

Ale nie mogę przypisać klasa w ten sposób, bo to jest zarezerwowane słowo. Nie mogę też dodać nazwy w ten sposób, ponieważ jest ona używana jako słowo kluczowe dla atrybutu nazwy tagu. Wiem, że mogę dodać je później, używając na przykład tag['class'], ale chciałbym wiedzieć, czy to jedyny sposób na dodanie klasy do nowego tagu? A może jest jakiś sposób na zrobienie tego jednym krokiem?

Odpowiedz

15

Masz rację - klasa jest pythonem zastrzeżonym i nie może być użyta jako argument słowa kluczowego, ponieważ analizator składni języka narzeka.

Istnieje sposób obejścia tego problemu - możesz podać argumenty funkcji za pomocą słownika poprzedzonego przez **. W ten sposób "klasa" jest po prostu kolejnym ciągiem znaków i nie będzie kolidować z zastrzeżonym słowem podczas analizowania składni Pythona, ale argument słowa kluczowego zostanie poprawnie przekazany w środowisku wykonawczym.

W twoim przypadku obejście powinno być -

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

Niby brzydka wiem, ale to działa ..;)

+1

Tak, to działa! Może moja wiedza na temat Pythona jest zbyt uboga, ale już próbowałem czegoś takiego, ale to się nie udało. Twój kod działa całkiem nieźle. Dziękuję Ci! –

+0

Nie ma za co! cieszę się, że mogłem pomóc;) – itai