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?
93
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?
>>> 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, aledecompose
dział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.
źródło
decompose
iextract
polega 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ą.remove
zawarta. Często używany do czyszczenia kodu HTML z niepotrzebnych tagów i formatowania.Jak stwierdzono w ( oficjalnej dokumentacji ), możesz użyć tej
extract
metody 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')]
źródło
extract
.[x.extract() for x in a.select('span.className')]