В настоящее время я переформатирую некоторые HTML-страницы с помощью BeautifulSoup, и у меня возникла небольшая проблема.
Моя проблема в том, что в исходном HTML есть такие вещи:
<li><p>stff</p></li>
и
<li><div><p>Stuff</p></div></li>
а также
<li><div><p><strong>stff</strong></p></div><li>
С помощью BeautifulSoup я надеюсь удалить теги div и p, если они существуют, но сохранил сильный тег.
Я просматривал документацию по красивому супу и не нашел ничего. Идеи?
Спасибо.
Ответ 1 · рейтинг 7 · jathanism
То, что вы хотите сделать, можно сделать с помощью replaceWith. Вы должны продублировать элемент, который хотите использовать в качестве замены, а затем передать его в качестве аргумента replaceWith. Документация для replaceWith довольно ясна. о том, как это сделать.
Ответ 2 · рейтинг 8 · Suzana
Этот вопрос, вероятно, относился к более старой версии BeautifulSoup, потому что с bs4 вы можете просто использовать развернуть функцию:
s = BeautifulSoup('<li><div><p><strong>stff</strong></p></div><li>')
s.div.unwrap()
>> <div></div>
s.p.unwrap()
>> <p></p>
s
>> <html><body><li><strong>stff</strong></li><li></li></body></html>
Ответ 3 · рейтинг 2 · user14402164
Я видел много ответов на этот простой вопрос, я также пришел сюда, чтобы увидеть что-то полезное, но, к сожалению, я не получил того, что искал, после нескольких попыток я нашел простое решение для этого ответа, и вот оно
soup = BeautifulSoup(htmlData, "html.parser")
h2_headers = soup.find_all("h2")
for header in h2_headers:
header.name = "h1" # replaces h2 tag with h1
Все теги h2 конвертированы в h1. Вы можете преобразовать любой тег, просто изменив имя.
Ответ 4 · рейтинг 1 · suzanshakya
Вы можете написать свою собственную функцию для удаления тегов:
import re
def strip_tags(string):
return re.sub(r'<.*?>', '', string)
strip_tags("<li><div><p><strong>stff</strong></p></div><li>")
'stff'