【问题标题】:How to append a tag after a link with BeautifulSoup如何在带有 BeautifulSoup 的链接后附加标签
【发布时间】:2010-05-25 20:39:45
【问题描述】:

从这样的 Html 输入开始:

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

使用 BeautifulSoup,我想将这个 Html 更改为:

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

是否可以使用 BeautifulSoup 做到这一点?

类似:

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
for link_tag in soup.findAll('a'):
    link_tag = link_tag + '<b>OK</b>' #This obviously does not work

【问题讨论】:

  • 是的,有可能。 BeautifulSoup 有很好的文档:crummy.com/software/BeautifulSoup/documentation.html 如果您有问题,请发布您的代码,我(和其他人)会提供帮助。
  • 实际上,从文档中了解这种特殊的操作并非易事。

标签: python beautifulsoup


【解决方案1】:

您可以使用 BeautifulSoup 的insert 在正确的位置添加元素:

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)

for link_tag in soup.findAll('a'):
    link_tag_idx = link_tag.parent.contents.index(link_tag)
    link_tag.parent.insert(link_tag_idx + 1, '<b>OK</b>')

这适用于您提供的示例,但我不确定这是唯一或最有效的方法。

【讨论】:

  • 我认为最后一行应该是 `link_tag.parent.insert(link_tag_idx + 1, BeautifulSoup("
    "))` 因为 "" 没有正确转换在我的机器上。
  • soup.insert(i, tag) 非常违反直觉,因为i 没有直接的意义。(因为我的soup.body.contents = ['\n', '&lt;div&gt;...&lt;/div&gt;', '\n', '&lt;script&gt;...&lt;/script&gt;', '\n', ...]。).append().insert_after() 工作正常,尽管。 PS:@sup 你应该使用br = soup.new_tag('br')
【解决方案2】:

你的想法是对的。只需匹配类型,然后执行replaceWith

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
for link_tag in soup.findAll('a'):
    link_tag.replaceWith( link_tag.prettify() + '<b>OK</b>' )
print soup

应该给你:

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

【讨论】:

  • 请注意任何从 Google 等获得此答案的人,在 BS4 中有一个 insert_after() 方法,例如:b = soup.new_tag("b"); b.string = "OK"; link_tag.insert_after(b) 应该可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
  • 2013-02-03
  • 2015-09-10
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多