Czy tagi skryptów i całą ich zawartość można usunąć z HTML za pomocą BeautifulSoup, czy też muszę używać wyrażeń regularnych lub czegoś innego?
Odpowiedzi:
>>> 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'])]Zauważ, że aby użyć wielu tagów, parametr musi być listą
'<script class="blah">a</script>baba<script id="blahhhh">b</script>'? Czy to jest to samo?
<html><head></head><body><p>baba</p></body></html>
Zaktualizowana odpowiedź dla tych, którzy mogą potrzebować w przyszłości: Prawidłowa odpowiedź to.
decompose()
Możesz używać różnych sposobów, ale decomposedziała w miejscu.
Przykładowe użycie:
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>'
Bardzo przydatne do pozbycia się detrytusów, takich jak „script”, „img” i tak dalej.
decomposei extractpolega na tym, że ta ostatnia zwraca to, co zostało usunięte, podczas gdy ta pierwsza po prostu ją niszczy. To jest dokładniejsza odpowiedź na pytanie, ale inne metody działają.
removezawarta. Często używany do czyszczenia kodu HTML z niepotrzebnych tagów i formatowania.
Jak stwierdzono w ( oficjalnej dokumentacji ), możesz użyć tej extractmetody do usunięcia całego poddrzewa pasującego do wyszukiwania.
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')]