2012-08-27 61 views
0

我想立刻在BeautifulSoup與BeautifulSoup new_tag插入兩次

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>')) 

添加多個標籤的div [ID =「頭」]因此,我得到了插入的代碼兩次(一些額外的<和>),但不知道爲什麼。

<<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創建幾個新標籤()。可能是什麼問題?

+0

看來,'new_tag'已經將'<' and '>'添加到您的標記中,所以從字符串開始刪除'<',從結尾刪除'>'。 – Leri

回答

1

我假設你正在使用你正在使用BeautifulSoup4?如果你這樣做,問題是,你不能創建多個標籤與一個new_tag(),更不用說插入HTML:

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

必須seperately創建每個孩子和手動分配的屬性:

>>> 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> 

編輯:語法高亮使這看起來很奇怪。