Python 3.4 - Lesen von Daten von einer Webseite
Ich bin derzeit versuchen zu lernen, wie zu Lesen, von einer Webseite, und haben versucht, die folgenden:
>>>import urllib.request
>>>page = urllib.request.urlopen("http://docs.python-requests.org/en/latest/", data = None)
>>>contents = page.read()
>>>lines = contents.split('\n')
Dieser gibt die folgende Fehlermeldung:
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
lines = contents.split('\n')
TypeError: Type str doesn't support the buffer API
Nun bin ich davon ausgegangen, dass das Lesen von einer URL wäre ziemlich ähnlich vom Lesen eines text-Datei, und der Inhalt contents
wäre der Typ str
. Ist dies nicht das Fall?
Wenn ich versuche >>> contents
ich kann sehen, dass der Inhalt contents
ist nur das HTML-Dokument, also warum nicht `.split('\n') arbeiten? Wie kann ich machen, damit es funktioniert?
Bitte beachtet, daß ich die Spaltung auf die neue-Zeile-Zeichen, so kann ich drucken Sie die Webseite Zeile für Zeile.
Folgt dem gleichen Gedankengang, ich habe dann versucht contents.readlines()
gab diesem Fehler:
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
contents.readlines()
AttributeError: 'bytes' object has no attribute 'readlines'
Ist die Webseite gespeichert ist, in ein Objekt namens 'bytes'?
Kann mir jemand erklären, was hier passiert? Und wie zu Lesen, die Webseite richtig?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie wickeln Sie es mit einem
io.TextIOWrapper()
Objekt und wandeln Sie Ihre Datei (utf-8
ist ein universal-Sie können es ändern, um die richtige Codierung zu):Decode bytes-Objekt erzeugen string:
Den Rückgabetyp der
read()
Methode ist vom Typbytes
. Sie brauchen, um richtig zu decodieren, Sie in einen string, bevor Sie Sie verwenden können, eine string-Methode wiesplit
. Vorausgesetzt, es ist UTF-8, die Sie verwenden können:Als eine Allgemeine Lösung, die Sie sollten überprüfen Sie die Zeichenkodierung, die der server liefert in der Antwort auf Ihre Anfrage und verwenden.