2011-04-08 17 views

cevap

110
>>> from bs4 import BeautifulSoup 
>>> soup = BeautifulSoup('<script>a</script>baba<script>b</script>', 'lxml') 
>>> [s.extract() for s in soup('script')] 
>>> soup 
baba 
+0

Kaldırılacak ek etiketlere zincirlemenin en iyi yolu nedir? Şu anda, komutları birbiri ardına tekrarladığım zaman, [s.extract() 'da çorbada (' script ')] sonra [s.extract()' da çorbada ('iframe')] vb. ama ben onları (örneğin 'iframe', 'script')] için ss. – Ila

+6

@Ali Çorbalarda [s.extract() için [[iframe ',' script ']) kullanmak zorundasınız.] 'Birden fazla etiket kullanmak için parametre –

+0

@ FábioDiniz olmalıdır. Şöyle bir şey çıkardım: '' baba ''? Aynı mı? – user2883071

12

Aramayı eşleşen tüm alt ağacı kaldırmak için extract yöntemi kullanabilirsiniz.

import BeautifulSoup 
a = BeautifulSoup.BeautifulSoup("<html><body><script>aaa</script></body></html>") 
[x.extract() for x in a.findAll('script')] 
10
ileride başvurmak üzere gerekebilir olanlar için cevap Güncelleme

: doğru cevaptır. 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>' 

Oldukça kullanışlı

böylece vb 'script', 'img' gibi döküntü kurtulmak için.

+1

'decompose' ile' extract' arasındaki fark, ikincisinin kaldırılan şeyi geri döndürmesidir, oysaki sadece onu yok eder. Yani bu soruna daha kesin bir cevaptır, ancak diğer yöntemler işe yarar. – Mike

+0

Decompose, komut dosyası etiketlerinin içeriğini kaldırmaz, yalnızca etiketleri kaldırır. –

+0

Hem yorumlarınızla hemfikirim. İşte bu yüzden OP'nin “kaldırılması” içeriğindeki doğru cevabı söyledim. Genellikle gereksiz etiketlerin ve biçimlendirmenin HTML'sini temizlemek için kullanılır. – Vangel

İlgili konular