BeautifulSoup new_tag插入两次

时间:2012-08-27 10:50:44

标签: python beautifulsoup

我正在尝试使用

在BeautifulSoup中立即向div [id ='head']添加几个标签
soup.find_all('div', id='head',limit=1)[0].insert(1, soup.new_tag(u'<div id="menu_top_right" class="menu_top"><div class="menu_inner"><a class="" target="_blank" href="./local/zkratky/index.html">Zkratky</a><span>|</span><a class="" target="_blank" href="./local/slovnik/index.html">Slovník</a><span>|</span><a class="" target="blank" href="./local/dokumenty/index.html">Dokumenty</a></div></div><div class="clear"></div>'))

结果我将代码插入两次(带有一些额外的&lt;和&gt;),但不知道为什么。

<<div id="menu_top_right" class="menu_top">
    <div class="menu_inner">
        <a class="" target="_blank" href="./local/zkratky/index.html">Zkratky</a><span>|</span>
        <a class="" target="_blank" href="./local/slovnik/index.html">Slovník</a><span>|</span>
        <a class="" target="blank" href="./local/dokumenty/index.html">Dokumenty</a>
   </div>
</div>
<div class="clear"></div>>
</<div id="menu_top_right" class="menu_top">
    <div class="menu_inner">
        <a class="" target="_blank" href="./local/zkratky/index.html">Zkratky</a><span>|</span>
        <a class="" target="_blank" href="./local/slovnik/index.html">Slovník</a><span>|</span>
        <a class="" target="blank" href="./local/dokumenty/index.html">Dokumenty</a>
    </div>
</div>
<div class="clear"></div>>

我没有在文档中找到任何说明你不能用一个soup.new_tag()创建几个新标签的内容。可能是什么问题?

1 个答案:

答案 0 :(得分:1)

我假设你正在使用你正在使用BeautifulSoup4?如果你这样做,问题是你不能用一个new_tag()创建多个标签,更不用说插入HTML了:

>>> soup.new_tag('<div myattr="foo"></div>')
<<div myattr="foo"></div>></<div myattr="foo"></div>>

您必须单独创建每个子项并手动分配属性:

>>> parent = soup.find('div')
>>> parent
<div></div>
>>> new_tag = soup.new_tag('div')
>>> new_tag['id'] = 'menu_top_right'
>>> new_tag['class'] = 'menu_top'
>>> new_tag
<div class="menu_top" id="menu_top_right"></div>
>>> parent.insert(1, new_tag)
>>> soup
<div><div class="menu_top" id="menu_top_right"></div></div>

编辑:语法高亮使这看起来很奇怪。