Script etiketleri ve tüm içerikleri BeautifulSoup ile HTML'den kaldırılabilir mi, yoksa Normal İfadeler veya başka bir şey kullanmak zorunda mıyım?
Yanıtlar:
>>> 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'])]
Unutmayın, birden fazla etiket kullanmak için parametre bir liste olmalıdır
'<script class="blah">a</script>baba<script id="blahhhh">b</script>'
? Aynı mı?
<html><head></head><body><p>baba</p></body></html>
İleride başvurmak isteyebilecekler için güncellenmiş cevap: Doğru cevap.
decompose()
Farklı yollar kullanabilirsiniz, ancak decompose
yerinde çalışır.
Örnek kullanım:
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>'
"Komut dosyası", "img" gibi döküntülerden kurtulmak için oldukça kullanışlıdır.
decompose
ve extract
olduğu ikinci döner eski hemen yok eder, oysa uzaklaştırılmıştır şey. Yani bu, sorunun daha kesin cevabıdır, ancak diğer yöntemler işe yarar.
remove
içeriğe verilen OP'ye göre doğru cevabı söyledim . Genellikle gereksiz etiketlerin ve biçimlendirmenin HTML'sini temizlemek için kullanılır.
( Resmi belgelerde ) belirtildiği gibi extract
, arama ile eşleşen tüm alt ağacı kaldırmak için yöntemi kullanabilirsiniz .
import BeautifulSoup
a = BeautifulSoup.BeautifulSoup("<html><body><script>aaa</script></body></html>")
[x.extract() for x in a.findAll('script')]
extract
için belirli öğeleri seçmektir . [x.extract() for x in a.select('span.className')]