Вопрос по python – Добавьте родительские метки с красивым супом

2

У меня есть много страниц HTML с различными разделами, содержащими эти фрагменты кода:

<div class="footnote" id="footnote-1">
<h3>Reference:</h3>
<table cellpadding="0" cellspacing="0" class="floater" style="margin-bottom:0;" width="100%">
<tr>
<td valign="top" width="20px">
<a href="javascript:void(0);" onclick='javascript:toggleFootnote("footnote-1");' title="click to hide this reference">1.</a>
</td>
<td>
<p> blah </p>
</td>
</tr>
</table>
</div>

Я могу успешно проанализировать HTML и извлечь эти соответствующие теги

tags = soup.find_all(attrs={"footnote"})

Теперь мне нужно добавить новые родительские теги, чтобы фрагмент кода был таким:

<div class="footnote-out"><CODE></div>

Но я не могу найти способ добавить родительские теги в bs4 так, чтобы они заключали в скобки идентифицированные теги. insert () / insert_ перед добавлением после идентифицированных тегов.

Я начал с попытки манипуляции со строками:

for tags in soup.find_all(attrs={"footnote"}):
      tags = BeautifulSoup("""<div class="footnote-out">"""+str(tags)+("</div>"))

но я считаю, что это не лучший путь.

Спасибо за любую помощь. Просто начал использовать bs / bs4, но, похоже, не взломал это.

Ваш Ответ

1   ответ
16

Как насчет этого:

def wrap(to_wrap, wrap_in):
    contents = to_wrap.replace_with(wrap_in)
    wrap_in.append(contents)

Простой пример:

from bs4 import BeautifulSoup
soup = BeautifulSoup("<body><a>Some text</a></body>")
wrap(soup.a, soup.new_tag("b"))
print soup.body
# <body><b><a>Some text</a></b></body>

Пример с вашим документом:

for footnote in soup.find_all("div", "footnote"):
    new_tag = soup.new_tag("div")
    new_tag['class'] = 'footnote-out'
    wrap(footnote, new_tag)
Спасибо, что нашли время, чтобы помочь мне. Ваше решение работает довольно хорошо. Cosades

Похожие вопросы