2016-11-05 2 views
0

Unter Berücksichtigung der folgenden html:Löschen h2 bis erreichen Sie den nächsten h2 in beautifulsoup

<h2 id="example">cool stuff</h2> <ul> <li>hi</li> </ul> <div> <h2 id="cool"><h2> <ul><li>zz</li> </ul> </div> 

und die folgende Liste:

ignore_list = ['example','lalala'] 

Mein Ziel ist es, während er durch den HTML gehen BeautifulSoup verwenden, ich finde ein h2, das eine ID hat, die in meiner Liste ist (ignore_list) Ich sollte alle ul und lis darunter löschen, bis ich ein anderes h2 finde. Ich würde dann überprüfen, ob der nächste h2 in meiner Ignorierliste war, wenn ja, lösche alle ul und lis, bis ich die nächste h2 erreiche (oder wenn es keine h2s mehr gibt, lösche die ul und lis unter der aktuellen und stoppe).

Wie ich den Prozess sehe: Sie lesen alle h2s von oben nach unten im DOM. Wenn sich die ID für eine dieser Komponenten in der ignore_list befindet, dann lösche alle ul und li unter der h2, bis du NEXT h2 erreichst. Wenn es kein h2 gibt, lösche die ul und LI, dann stoppe.

Hier ist die vollständige HMTL Ich versuche, mit zu arbeiten: http://pastebin.com/Z3ev9c8N

Ich versuche, alle UL und lis zu löschen, nachdem „See_also“ Wie würde ich dies in Python erreichen?

Antwort

0

Unten ist die Lösung, die ich gefunden habe.

entfernen Inhalt Ich will nicht

 try: 
      for element in body.find_all('h2'): 
       current_h2 = element.get_text() 
       current_h2 = current_h2.replace('[edit]','') 
       #print(current_h2) 
       if(current_h2 in ignore_list): 
        if(element.find_next_sibling('div') != None): 
         element.find_next_sibling('div').decompose() 
        if(element.find_next_sibling('ul') != None): 
         element.find_next_sibling('ul').decompose() 
     except(AttributeError, TypeError) as e: 
      continue