2017-07-29 4 views
0

Ich habe ein HTML etwa so:Suchen und Ersetzen mit BeautifulSoup

<hmtl> 
    <body> 
     <h1>heading 1</h1> 
     <p>blah</p> 
     <h2>heading 2</h2> 
     <p>blah</p> 
     <h2>heading 3</h2> 
     <p>blah</p> 
    </body> 
</html> 

Ich mag prettified Text zurückkehren zu können und nicht HTML.

Ich dachte, der einzige Weg, dies zu tun, ist, jede Überschrift mit der Überschrift und einem Zeilenvorschubzeichen zu finden und zu ersetzen.

Gibt es einen besseren Weg?

+0

haben Sie versucht, 'soup.prettify()', das ist, was es tut. – davedwards

Antwort

0

Sie können einen <br/> Tag nach jeder Header einfügen den Raum zwischen dem Header und den Inhalt zu erhöhen, wenn dies ist, was Sie brauchen:

import re 
for header in soup.find_all(name=re.compile(r'^h\d')): 
    br=soup.new_tag('br') 
    header.insert_after(br) 

Vor dem Einsetzen:

from bs4 import BeautifulSoup 
soup = BeautifulSoup("""<hmtl> 
    <body> 
     <h1>heading 1</h1> 
     <p>blah</p> 
     <h2>heading 2</h2> 
     <p>blah</p> 
     <h2>heading 3</h2> 
     <p>blah</p> 
    </body> 
</html>""", "html.parser") 

from IPython.display import display, HTML 
chart = HTML(str(soup)) 
display(chart) 

enter image description here

Insert <br/> tag:

for header in soup.find_all(name=re.compile(r'^h\d')): 
    br=soup.new_tag('br') 
    header.insert_after(br) 

chart = HTML(str(soup)) 
display(chart) 

enter image description here