漂亮的汤结合了具有相同名称的标签

时间:2018-11-09 17:33:53

标签: python xml beautifulsoup

我有多个标题标签,我想将它们组合成一个标题标签。以下是我所拥有的:(我想结合标题标签,以便在打印汤时将标签放在一起,并且我不希望它们成为字符串)

<title>
  <b> Title Name 1 </b>
</title> 
<title>
  Title Name 2
</title>

这是我想要的输出:

<title>
  <b> Title Name 1 </b> Title Name 2
</title> 

这是我到目前为止尝试做的事情: 我创建了一个新标签,然后尝试将所有标题标签添加到其中,以便以后可以解包标题标签并留下一个标签:

<title>
  <b> Title Name 1 </b>
</title> 
<title>
  Title Name 2
</title>
<final-title>
</final-title>


for item in soup.findAll(['title', 'final-title']):
    if item.name == 'final-title':
        text = item
    if item.name == 'title':
        text.insert(len(text.contents),item)

但是,由于我有很多这样的标题标签,因此该方法无法获取适当的标题名称。我也尝试过使用类似{Wrap multiple tags with BeautifulSoup)的东西

1 个答案:

答案 0 :(得分:0)

要使用.insert(),您需要将字符串转换为list(),但我认为只用<title>创建.encode_contents()的列表innerHTML并将其组合起来会更容易。

from bs4 import BeautifulSoup

html_raw = '''<title>
  <b> Title Name 1 </b>
</title> 
<title>Title Name 2</title>
<final-title>
</final-title>
'''
title = []
soup = BeautifulSoup(html_raw, 'html.parser')

for item in soup.findAll(['title', 'final-title']):
    if item.name == 'title':
        title.append(item.encode_contents().strip())

combinedTitle = '<title>%s</title>' % ' '.join(title)

print combinedTitle
# output
# <title><b> Title Name 1 </b> Title Name 2</title>