2017-12-27 5 views
0

Ich habe ein HTML-Dokument, das eine Reihe von <div> 's enthält, mit Kind <p>' s und innerhalb <href> 's. Das Ziel ist, das,Schöne Suppe - Äußere Tags entfernen

  1. die <div> und <p> Tags
  2. am Ende jedes <div> eine

    Damit diese </br>

Beispiel hinzufügen entfernt entfernen:

<div> 
    <p> 
    <a href="" id="tnt1">[1]</a>"RFC 4456 - BGP Route Reflection: An Alternative to Full ... - IETF Tools.">ref="https://example.com">https://https://example.com"</a></span><span>. Accessed 15 Nov. 2017. 
    </p> 
</div> 

Wird dies:

<a href="" id="tnt1">[1]</a>"RFC 4456 - BGP Route Reflection: An Alternative to Full ... - IETF Tools.">ref="https://example.com">https://https://example.com"</a></span><span>. Accessed 15 Nov. 2017. 
</br> 

Aktuelle

Bisher ist mein Code:

from bs4 import BeautifulSoup 

for div in soup.find_all(name=re.compile(r'div')): 
    print div 

jedoch alle Beispiele den inneren Text eher dann tatsächlich Tags darauf hinzuweisen scheinen zu ersetzen. Auch wenn es eine Möglichkeit gibt, dies in bs3 zu tun, wäre es ideal, da all mein anderer Code derzeit v3 verwendet.

Kann mir jemand in die richtige Richtung zeigen? Danke,

+0

können Sie nicht direkt erhalten '' ? – furas

Antwort

1

''.join(str(x) for x in div.p.contents) gibt mir innere HTML als String auf BS4

ich parent = div.parent um es später

div.extract() Verwendung von I div mit allen Unter-Tags entfernen.

Mit parent.append() Ich legte innere HTML zurück.

from bs4 import BeautifulSoup 

data = '''<strong> 
<div> 
    <p> 
    <a href="" id="tnt1">[1]</a>"RFC 4456 - BGP Route Reflection: An Alternative to Full ... - IETF Tools.">ref="https://example.com">https://https://example.com"</a></span><span>. Accessed 15 Nov. 2017. 
    </p> 
</div> 
</strong>''' 

soup = BeautifulSoup(data, 'html.parser') 

for div in soup.find_all('div'): 
    parent = div.parent 

    inner = ''.join(str(x) for x in div.p.contents) + "<br/>" 
    print('--- inner ---') 
    print(inner) 

    # remove div with all subtags 
    div.extract() 

    parent.append(BeautifulSoup(inner, 'html.parser')) 
    print('--- after ---') 
    print(parent) 

Ergebnis:

--- inner --- 

<a href="" id="tnt1">[1]</a>"RFC 4456 - BGP Route Reflection: An Alternative to Full ... - IETF Tools.">ref="https://example.com">https://https://example.com"<br/> 
--- after --- 
<strong> 

<a href="" id="tnt1">[1]</a>"RFC 4456 - BGP Route Reflection: An Alternative to Full ... - IETF Tools."&gt;ref="https://example.com"&gt;https://https://example.com"<br/></strong> 
+0

Danke. Wie würdest du das dann an Stelle der vorherigen div einfügen – felix001

+0

siehe neuen Code - ich benutze 'div.extract()', um 'div' und' parent.append() 'zu entfernen, um inneren HTML zurück zu setzen. – furas