使用Beautiful Soup创建名为“name”

时间:2016-07-14 16:25:43

标签: python beautifulsoup

我有一块XML需要将一些元素插入到

<importer in="!SRCFILE!" media="movie">
<video-out id="video_2_importer"></video-out>
<audio-out id="audio_2_importer"></audio-out>
</importer>

我需要做的是在此块中插入一些选项,以便我的输出如下所示:

<importer media="movie" in="!SRCFILE!">
    <video-out id="video_2_importer"></video-out>
    <audio-out id="audio_2_importer"></audio-out>
    <option name="start-time" value="60"></option>
    <option name="end-time" value="120"></option>
</importer>

我已成功使用bs4查找元素并创建新标签,但似乎参数'name'是bs4中的保留字。我尝试了以下内容:

in_point = soup.new_tag('option', **{'value':'60','name':'start-time'})

但是我收到以下错误

TypeError: new_tag() got multiple values for keyword argument 'name'

如果我从我的dict中删除'name':'start-time',它会正确插入。如果我将“名称”更改为任何其他文本,则可以。因此,执行以下操作可以创建正确的标记。

in_point = soup.new_tag('option', **{'value':'60','stuff':'start-time'})

我知道我可能在语法上做错了,允许我使用属性'name',我只是不知道是什么。

2 个答案:

答案 0 :(得分:2)

在这种情况下,您可以通过以下方式创建Tag的实例:

from bs4 import BeautifulSoup, Tag

in_point = Tag(builder=soup.builder, 
               name='option', 
               attrs={'value':'60','name':'start-time'})

这基本上是new_tag()在幕后做的事情:

def new_tag(self, name, namespace=None, nsprefix=None, **attrs):
    """Create a new tag associated with this soup."""
    return Tag(None, self.builder, name, namespace, nsprefix, attrs)

答案 1 :(得分:0)

Beautiful Soup使用字典来构建标签。您不需要导入标签即可执行此操作。只需在创建字典中的key:value时创建一个属性即可。 例如:importer ['media'] =“电影”