Kann Zeilenumbrüche aus String nicht entfernen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Zero1234
User
Beiträge: 10
Registriert: Samstag 28. April 2012, 00:34

Hallo
Ich möchte aus dem Quellcode einer Website die Zeilenumbrüche entfernen, leider finde ich nichts, dass funktioniert.

Code: Alles auswählen

import urllib.request

class MyOpener(urllib.request.FancyURLopener):
      version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'

def seite(url): #gibt den Quelltext der Seite als String zurück
    myopener = MyOpener()
    page = myopener.open(url)
    mybites=page.read()
    mystring=mybites.decode("utf8")
    page.close()
    return mystring

code=seite("www.google.de")
code=code.replace("\n","")
print(code)
Wenn ich den String, der den Quellcode enthält ausgebe, sehe ich Zeilenumbrüche.
mit code=code.replace("\n","") entferne ich zwar etwas (vorher sagt mir code.find, dass es etwas gefunden hat, anschließend aber nicht mehr), aber in der Ausgabe bleiben die Zeilenumbrüche.
Kann das mit dem URF8 zu tun haben?
Zuletzt geändert von Zero1234 am Freitag 8. Februar 2013, 23:42, insgesamt 2-mal geändert.
BlackJack

@Zero1234: Bei dem Quelltext gibt es einen `NameError` weil `code` nirgends definiert wird.

`seite()` ist ein schlechter Name für eine Funktion. Funktionen tun etwas und deshalb sollten ihre Namen in der Regel eine Tätigkeit beschreiben. Der Name `seite` lässt eher vermuten dass ein „Ding”, also zum Beispiel die Daten einer Webseite daran gebunden sind, aber keine Funktion.

`page` ist ein schlechter Name für ein Dateiobjekt beziehungsweise eine Verbindung zu einem Webserver. Bei `mybites` ist wie bei `mystring` die Vorsilbe `my` unsinnig. Was soll das dem Leser vermitteln? Ausserdem gibt der `read()`-Aufruf sicher keine „Bisse” sondern B*y*tes zurück.

Die Zeile in der einfach nur ``mybites`` steht ist sinnfrei — die hat keinerlei Effekt.

Die Seite unbesehen als UTF-8 zu dekodieren schränkt die Funktion auf solche Seiten ein, die tatsächlich so kodiert sind.

``return`` ist keine Funktion, also sollte man diese Anweisung auch nicht so schreiben als wäre es eine. Die Klammern gehören dort nicht hin.

Schau Dir den Inhalt von `code` doch mal als `repr()`-Form an, dann siehst Du was an der Stelle wo die Zeilenumbrüche sind, in der Zeichenkette steht.

Für Webanfragen wird übrigens oft die `requests`-Bibliothek statt der Module aus der Standardbibliothek empfohlen. Da braucht man sich dann beispielsweise normalerweise nicht selbst um die (De)Kodierung kümmern.
Zero1234
User
Beiträge: 10
Registriert: Samstag 28. April 2012, 00:34

Danke für die schnelle Hilfe!
Mit den Formalien muss ich mich wohl mal in ruhe auseinander setzen. Der Rest war im Forum dazu geschrieben, da hab ich nicht ganz aufgepasst und reste, die ich bei meiner ausprobiererei übersehen hab :).
Das "my" zeug hatte ich erstmal zum testen so übernommen....hättest dir aber nicht so eine mühe machen müssen alles zu nennen, das unschön ist, so lange es läuft ;).

wenn ich die repr funktion nutze kann ich tatsächlich alle \r \t usw sehen und daraus auch entfernen. jetzt läuft also alles.

Danke nochmal
BlackJack

@Zero1234: Die `repr()`-Funktion ist nur zum Anzeigen aller Zeichen bei der Fehlersuche gedacht. Die ist kein Teil der Lösung Deines Problems. Wenn Du die also tatsächlich dafür *brauchst*, dann machst Du etwas falsch.
Zero1234
User
Beiträge: 10
Registriert: Samstag 28. April 2012, 00:34

Hmm, hast recht...jetzt wo alles lief, habe ich das nochmal weg genommen und es läuft immer noch.
Ich sollte mich wohl lieber mal hinlegen :).

Danke und gute N8
unbekannt100

Versuchs doch mal damit:

Code: Alles auswählen

code = "".join(code.split("\n"))
Das funktioniert bei mir immer.
BlackJack

@unbekannt100: Das ist aber aufwändiger als `replace()` zu verwenden und auch indirekter und nicht so offensichtlich.
Antworten