2011-04-08 8 views

답변

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

제거 할 추가 태그를 연결하는 가장 좋은 방법은 무엇입니까? 현재 명령을 하나씩 반복하면 수프 ('스크립트')에서 s를 위해 s.extract()를 수행 한 다음 스프 ('iframe')에서 s를} [s.extract()] 등으로 작동합니다. ,하지만 내가 수프 ('iframe', 'script')의 s를 위해 s.extract()를 연결하는 경우에는 그렇지 않습니다. – Ila

+6

@Ali 수프 ([ 'iframe', 'script'])]]에서 s에 대해 [s.extract()를 사용해야합니다. 다중 태그를 사용하려면 매개 변수가 목록이어야합니다. –

+0

@ FábioDiniz '' baba 의'? 똑같은가요? – user2883071

12

당신은 검색과 일치하는 모든 하위 트리를 제거 extract 방법을 사용할 수 있습니다.

import BeautifulSoup 
a = BeautifulSoup.BeautifulSoup("<html><body><script>aaa</script></body></html>") 
[x.extract() for x in a.findAll('script')] 
10
나중에 참조 할 수 있도록해야 할 수 있습니다 사람들을 위해 대답을 업데이트

: 정답입니다. 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>' 

꽤 유용

가 너무 등등 '스크립트', 'IMG'같은 이물질을 제거합니다.

+1

'decompose'와'extract'의 차이는 후자가 제거 된 것을 반환한다는 것입니다. 반면에 전자는 제거한 것만 반환합니다. 이것은 질문에 대한보다 정확한 대답이지만 다른 방법들도 효과가 있습니다. – Mike

+0

Decompose는 스크립트 태그의 내용을 제거하지 않고 태그 만 제거합니다. –

+0

귀하의 의견에 모두 동의합니다. 그래서 OP 에서처럼 정답을 '제거'하는 이유입니다. 불필요한 태그 및 서식의 HTML을 정리하는 데 종종 사용됩니다. – Vangel

관련 문제