красивые суповые комбайны с одинаковыми именами - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть несколько тегов заголовка, и я хотел бы объединить их в один тег заголовка. Вот что у меня есть: (Я хочу объединить теги заголовков, чтобы при печати супа теги были вместе, и я не хочу, чтобы они становились строками)

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

Однако этот метод не захватывает названия заголовков приложений, потому что у меня много этих тегов заголовков. Я также пытался использовать что-то похожее на это ( Обернуть несколько тегов с BeautifulSoup )

1 Ответ

0 голосов
/ 10 ноября 2018

, чтобы использовать .insert(), вам нужно преобразовать строку в list(), но я думаю, что проще создать список innerHTML из <title> с .encode_contents(), а затем объединить его.

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...