2010-12-12 10 views
5

Czy ktoś ma jakiś przykładowy kod, który ilustruje jak używać Pythona Piękne Soup rozebrać wszystkie znaczniki HTML, z wyjątkiem niektórych, z ciągiem tekstu?Korzystanie Piękne Soup rozebrać tagów html z ciągiem

chcę się rozebrać cały JavaScript i HTML tagi wszystko oprócz:

<a></a> 
<b></b> 
<i></i> 

a także takie rzeczy jak:

<a onclick=""></a> 

Dzięki za pomoc - nie mogłem znaleźć wiele na internecie ten cel.

Odpowiedz

8
import BeautifulSoup 

doc = '''<html><head><title>Page title</title></head><body><p id="firstpara" align="center">This is <i>paragraph</i> <a onclick="">one</a>.<p id="secondpara" align="blah">This is <i>paragraph</i> <b>two</b>.</html>''' 
soup = BeautifulSoup.BeautifulSoup(doc) 

for tag in soup.recursiveChildGenerator(): 
    if isinstance(tag,BeautifulSoup.Tag) and tag.name in ('a','b','i'): 
     print(tag) 

daje

<i>paragraph</i> 
<a onclick="">one</a> 
<i>paragraph</i> 
<b>two</b> 

Jeśli chcesz tylko zawartość tekstu, można zmienić print(tag) do print(tag.string).

Jeśli chcesz usunąć atrybut jak onclick="" z tagiem a, można to zrobić:

if isinstance(tag,BeautifulSoup.Tag) and tag.name in ('a','b','i'): 
    if tag.name=='a': 
     del tag['onclick'] 
    print(tag) 
+0

Dziękuję - w dowolny sposób, aby usunąć onclick = "" – ensnare

+0

Dodaj „tag.attrs = [ ] 'przed drukowaniem, aby usunąć wszystkie atrybuty. Jeśli potrzebujesz większej kontroli, tag.attrs to tylko lista par (nazwa, wartość), w które możesz grać zgodnie z potrzebami. – Spacedman

+0

Hej, to było naprawdę pomocne, dziękuję bardzo. – ensnare

Powiązane problemy