Можно ли удалить теги сценария и все их содержимое из HTML с помощью BeautifulSoup, или мне нужно использовать регулярные выражения или что-то еще?
93
Можно ли удалить теги сценария и все их содержимое из HTML с помощью BeautifulSoup, или мне нужно использовать регулярные выражения или что-то еще?
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<script>a</script>baba<script>b</script>', 'lxml')
>>> for s in soup.select('script'):
>>> s.extract()
>>> soup
baba
[s.extract() for s in soup(['iframe', 'script'])]
Обратите внимание, что для использования нескольких тегов параметр должен быть списком'<script class="blah">a</script>baba<script id="blahhhh">b</script>'
? Это то же самое?<html><head></head><body><p>baba</p></body></html>
Обновленный ответ для тех, кому может понадобиться справиться в будущем: правильный ответ.
decompose()
Вы можете использовать разные способы, ноdecompose
работает на месте.Пример использования:
soup = BeautifulSoup('<p>This is a slimy text and <i> I am slimer</i></p>') soup.i.decompose() print str(soup) #prints '<p>This is a slimy text and</p>'
Довольно полезно избавиться от мусора, такого как «скрипт», «img» и так далее.
источник
decompose
иextract
в том, что последний возвращает то, что было удалено, а первый просто уничтожает его. Так что это более точный ответ на вопрос, но другие методы работают.remove
содержимого. Часто используется для очистки HTML от ненужных тегов и форматирования.Как указано в ( официальной документации ), вы можете использовать этот
extract
метод для удаления всего поддерева, соответствующего поиску.import BeautifulSoup a = BeautifulSoup.BeautifulSoup("<html><body><script>aaa</script></body></html>") [x.extract() for x in a.findAll('script')]
источник
extract
.[x.extract() for x in a.select('span.className')]