2017-03-20 5 views
-1

Ich habe eine Aufgabe, um rohen Text von HTML-Seite zu bekommen. Nach dem HTML-Parsing erhalte ich eine Zeichenfolge mit vielen '\ n' Symbolen. Wenn ich versuche, es durch leer zu ersetzen, funktioniert die Ersetzungsfunktion nicht. Hier ist mein Code:Warum ersetzen() in python3 funktioniert nicht für lange Zeichenfolge

from bs4 import BeautifulSoup 
import urllib 
with urllib.request.urlopen('http://shakespeare.mit.edu/lear/full.html') as response: 
lear_bytes = response.read() 
lear_html = str(lear_bytes) 
soup = BeautifulSoup(lear_html, 'html.parser') 
lear_txt_dirty = soup.get_text() 
lear_txt_clean = str.replace(lear_txt_dirty, '\n', '') 
print(lear_txt_clean) 
+0

können Sie a [MCVE] erstellen? –

+0

@ Jean-FrançoisFabre nach der Behebung eines Fehlers, dieser Code läuft und zeigt das Problem ... oder nicht ... es ist nicht wirklich ein Problem! – tdelaney

+0

@tdelaney so Python ersetzen Funktion funktioniert? Puh, ich bin so erleichtert. –

Antwort

1

Wenn String Probleme aussortieren, die Nutzungs die repr der Zeichenfolge zu drucken, so können Sie sehen, was wirklich da ist. Ersetzen Sie Ihren Druck mit:

#print(lear_txt_clean) 
print("Num newlines", lear_txt_clean.count('\n')) 
print(repr(lear_txt_clean[:80])) 

ich

Num newlines 0 
"b'\\n \\n \\n King Lear: Entire Play\\n \\n \\n \\n \\n \\n\\n\\nKing Lear\\n\\n  Shakesp" 

Sie sind eine Python-Byte-Darstellung der Textverarbeitung, nicht der eigentliche Text. In Ihrem Code ist ein bytes Objekt, aber lear_html = str(lear_bytes) entschlüsselt das Objekt nicht, es gibt Ihnen eine Python-Darstellung des Objekts bytes. Stattdessen sollten Sie nur lassen BeautifulSoup das rohe Bytes haben und lassen Sie es es aussortieren:

from bs4 import BeautifulSoup 
import urllib 
with urllib.request.urlopen('http://shakespeare.mit.edu/lear/full.html') as response: 
    soup = BeautifulSoup(response.read(), 'html.parser') 
lear_txt_dirty = soup.get_text() 
lear_txt_clean = str.replace(lear_txt_dirty, '\n', '') 
print(lear_txt_clean[:80]) 
+0

Vielen Dank für Ihre Antwort! Es ist Arbeit! Außerdem bin ich mir darüber im Klaren, dass es möglich ist, das gleiche Ergebnis zu erhalten, indem ich die decode-Methode nicht str, sondern lear_bytes benutze. –

Verwandte Themen