Чи можна теги скриптів та весь їх вміст видалити з 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>'
Дуже корисно позбутися такого детриту, як 'script', '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')]