2016-05-03 11 views
0

Ich ziehe Text aus den Debatten des Präsidenten. Ich bin zu one gekommen, das ein Problem hat: Es verwandelt jedes Wort des Wortes "Debatte" in ein Tag <debate>. Mach weiter, suche nach "Willkommen zurück zum republikanischen Präsidenten"; bemerken Sie ein offensichtliches Wort fehlt?Wie entferne ich ein falsches Tag in BeautifulSoup

Cool, so BeautifulSoup macht eine hervorragende Arbeit der Aufräumarbeiten chaotisch HTML und Hinzufügen von schließenden Tags waren sie sollte gewesen sein. Aber in diesem Fall, das muckt mich auf, weil <debate> ist jetzt ein Kind von <p> und die schließende </debate> ist allllllll der Weg am Ende hinzugefügt; Dadurch wird die verbleibende Debatte innerhalb dieses Tags verschachtelt.

Wie sage ich BeautifulSoup entweder <debate> zu ignorieren oder zu entfernen? Oder alternativ: Wie füge ich unmittelbar danach ein schließendes Tag hinzu? Ich habe versucht, unwrap, aber bis ich es nennen kann, hat BS bereits das schließende Tag am Ende eingerichtet, und damit folgende Absätze Kinder statt Geschwister gemacht.

Hier ist, wie ich bin ein:

from bs4 import BeautifulSoup 
import urllib 

bad_debate = 'http://www.presidency.ucsb.edu/ws/index.php?pid=111395' 
file = urllib.urlopen(bad_debate) 
soup = BeautifulSoup(file) 

Meine Vermutung ist, ich etwas zwischen dem URL-Aufruf und BeautifulSoup einfügen muß, sondern für das Leben von mir, ich kann nicht herausfinden, wie das ändern Dateiinhalte.

Antwort

2

html5lib parser eine bessere Arbeit (als lxml oder html.parser) das debate Element in diesem Fall der Handhabung:

soup = BeautifulSoup(file, "html5lib") 

Hier ist, wie es die erwähnte Teil der Debatte behandelt:

<p> 
    <b> 
    BARTIROMO: 
    </b> 
    Welcome back to the Republican presidential 
    <debate> 
    here in North Charleston. Right back to the questions. [ 
    <i> 
     applause 
    </i> 
    ] 
    </debate> 
</p> 
+0

Es spielt keine Es ist kein Fehler aufgetreten, aber jetzt werden keine Zeilen mehr verwendet, die bei anderen Transkriptionen gut waren. zB transkript = soup.find_all ("span", klasse _ = "displaytext") [0] (out of bounds), wenn ich prince supp.prettify() drücke, kann ich die Spanne sehen, die ich aufrufen möchte, aber find_all hat gewonnen nimm es nicht. – ScottieB

+0

@ScottieB Könnten Sie bitte eine separate Frage mit dem Code, den Sie bisher haben, erstellen und die Symptome beschreiben? Wirf mir hier einen Link. Vielen Dank. – alecxe

+0

Danke @alecxe für den Vorschlag, gepostet: http://stackoverflow.com/questions/37052097/html5lib-makes-beautifulsoup-miss-an-element – ScottieB