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