2016-07-27 11 views
0

Ich versuche, das br-Tag aus einem HTML-Code zu entfernen, indem Sie beautifulsoup verwenden.Python beautifulsoup entfernen selbst schließendes Tag

html zB:

<span class="qualification" style="font-size:14px; font-family: Helvetica, sans-serif;"> 
Doctor of Philosophy (Software Engineering), Universiti Teknologi Petronas 
<br> 
Master of Science (Computer Science), Government College University Lahore 
<br> 
Master of Science (Computer Science), University of Agriculture Faisalabad 
<br> 
Bachelor of Science (Hons) (Agriculture),University of Agriculture Faisalabad 
<br></span> 

Mein Python-Code:

for link2 in soup.find_all('br'): 
     link2.extract() 
for link2 in soup.findAll('span',{'class':'qualification'}): 
     print(link2.string) 

Das Problem ist, dass der vorherige Code nur die erste Qualifikation bekommt.

Antwort

1

Da keine dieser <br> s Kollegen haben zu schließen, fügt Schöne Suppe sie somit automatisch den folgenden HTML-Herstellung:

In [23]: soup = BeautifulSoup(html) 

In [24]: soup.br 
Out[24]: 
<br> 
Master of Science (Computer Science), Government College University Lahore 
<br> 
Master of Science (Computer Science), University of Agriculture Faisalabad 
<br> 
Bachelor of Science (Hons) (Agriculture),University of Agriculture Faisalabad 
<br/></br></br></br> 

Wenn Sie Tag.extract auf dem ersten <br> Tag rufen Sie alle seine Nachkommen entfernen und reiht seine Nachkommen enthalten:

In [27]: soup 
Out[27]: 
<span class="qualification" style="font-size:14px; font-family: Helvetica, sans-serif;"> 
Doctor of Philosophy (Software Engineering), Universiti Teknologi Petronas 
</span> 

Es scheint, dass Sie nur den gesamten Text aus dem span Element entpacken. Wenn das der Fall ist, nicht die Mühe etwas zu entfernen:

In [28]: soup.span.text 
Out[28]: '\nDoctor of Philosophy (Software Engineering), Universiti Teknologi Petronas\n\nMaster of Science (Computer Science), Government College University Lahore\n\nMaster of Science (Computer Science), University of Agriculture Faisalabad\n\nBachelor of Science (Hons) (Agriculture),University of Agriculture Faisalabad\n' 

Die Tag.text Eigenschaft all Strings extrahiert aus dem gegebenen Tag.

+0

Also, wenn beautifulsoup automatisch die schließenden Tags für ''
hinzufügen, kann dieses Problem durch Verwendung des XHTML-konform ''
vermieden werden? – HolyDanna

+0

@HolyDanna: ja. Das OP müsste trotzdem "Tag.text" oder "Tag.stripped_strings" verwenden, um den Inhalt von "span" zu erhalten. – vaultah

0

unwrap verwenden, sollten es

soup = BeautifulSoup(html) 
for match in soup.findAll('br'): 
    match.unwrap() 
0

arbeiten Hier ist eine Art und Weise zu tun:

for link2 in soup.findAll('span',{'class':'qualification'}): 
    for s in link2.stripped_strings: 
     print(s) 

Es ist nicht notwendig, die <br>-Tags zu entfernen, wenn Sie sie für eine spätere Verarbeitung entfernt erfordern. Hier ist link2.stripped_strings ein Generator, der jede Zeichenfolge im Tag ohne vorangestellte und nachfolgende Leerzeichen liefert. Die Druckschleife kann mehr geschrieben werden kurz und bündig als:

for link2 in soup.findAll('span',{'class':'qualification'}): 
    print(*link2.stripped_strings, sep='\n') 
+0

danke, es funktioniert – Aaron

Verwandte Themen