Могу ли я удалить теги сценария с BeautifulSoup? - PullRequest
82 голосов
/ 08 апреля 2011

Можно ли удалять теги сценариев и все их содержимое из HTML с помощью BeautifulSoup, или мне нужно использовать регулярные выражения или что-то еще?

Ответы [ 3 ]

140 голосов
/ 08 апреля 2011
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<script>a</script>baba<script>b</script>', 'lxml')
>>> [s.extract() for s in soup('script')]
>>> soup
baba
22 голосов
/ 09 октября 2016

Обновленный ответ для тех, кому может понадобиться дальнейшая ссылка: Правильный ответ. 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» и т. Д.

21 голосов
/ 08 апреля 2011

Как указано в ( официальной документации ), вы можете использовать метод extract, чтобы удалить все поддерево, которое соответствует поиску.

import BeautifulSoup
a = BeautifulSoup.BeautifulSoup("<html><body><script>aaa</script></body></html>")
[x.extract() for x in a.findAll('script')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...