Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python beautifulsoup new_tag: assign class as an attribute

I'm new to both python and beautifulsoup, so maybe there is a simple answer I can't find.

When I call .new_tag('name') I also can assign attributes like .new_tag('a', href='#', id='link1')

But I can't assign class this way, because it is reserved word. Also I can't add name this way, because it's used as keyword for the tag name attribute. I know I can add them later, using tag['class'] for example, but I would like to know, is this the only way to add class to new tag? Or there is a way to do that with a single step?

like image 256
Anton Vernigor Avatar asked Apr 13 '14 12:04

Anton Vernigor


2 Answers

You can use the attrs dictionnary:

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

The result will be:

<a class="classname" href="#" id="link1"></a>    
like image 168
Yom Avatar answered Nov 15 '22 11:11

Yom


You are right - class is a python reserved word and cannot be used as a keyword argument because the language parser complains.

There's a way around this - you can give the function keyword arguments through a dictionary preceded by **. That way "class" is just another string and wont collide with the reserved word when the python syntax is parsed, but the keyword argument gets passed correctly at runtime.

In your case the workaround should be -

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

Kind of ugly I know but it works.. ;)

like image 28
itai Avatar answered Nov 15 '22 12:11

itai