Можно ли удалить теги script и все их содержимое из HTML с помощью BeautifulSoup, или мне нужно использовать регулярные выражения или что-то еще?
Можно ли удалить теги script с помощью BeautifulSoup?
Ответ 1
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<script>a</script>baba<script>b</script>', 'lxml')
>>> [s.extract() for s in soup('script')]
>>> soup
baba
Ответ 2
Как указано в официальной документации (), вы можете использовать метод extract
для удаления всего поддерева, соответствующего поиску.
import BeautifulSoup
a = BeautifulSoup.BeautifulSoup("<html><body><script>aaa</script></body></html>")
[x.extract() for x in a.findAll('script')]
Ответ 3
Обновленный ответ для тех, кто может понадобиться для дальнейшего использования:
Правильный ответ.
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>'
Довольно полезно избавиться от детрита, например 'script', 'img' и т.д.