Можно ли удалить теги сценария и все их содержимое из 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')]