BeautifulSoup4中的Insert_after()函数表现出意外行为

3
我想使用bs4的insert_after()函数,但是我不明白为什么在这种情况下它只会在第二个标签后面插入。为什么不是每一个标签后面都插入呢?如果我改为插入一些文本,例如代替标签,则会在每个链接后面插入它。
from bs4 import BeautifulSoup
soup = BeautifulSoup('<p><a href="http://www.foo.com">this if foo</a><a href="http://www.bar.com">this if bar</a></p>')
b = soup.new_tag('b')
for link_tag in soup.findAll('a'):
    link_tag.insert_after(b)
print soup

输出:

<html>
    <p>
      <a href="http://www.foo.com">
        this if foo
      </a>
      <a href="http://www.bar.com">
        this if bar
      </a>
      <b>
      </b>
    </p>
  </body>
</html>

请问如何使用这个函数在每个标签后插入内容?
1个回答

4
不要在多个位置插入相同的BeautifulSoup标签。这里发生的情况是,它首先在第一个链接后插入该标签,然后,在下一次迭代中,它基本上将相同的标签移动到当前链接后面。
为循环中找到的每个链接创建新的标签:
for link_tag in soup.findAll('a'):
    link_tag.insert_after(soup.new_tag('b'))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接