Was ist der Unterschied zwischen "Inhalt" und "Text"?

122

Ich benutze die großartige Python Requests- Bibliothek. Ich stelle fest, dass die gute Dokumentation viele Beispiele dafür enthält, wie man etwas macht, ohne das Warum zu erklären . Beispielsweise werden beide r.textund r.contentals Beispiele für das Abrufen der Serverantwort angezeigt . Aber wo wird erklärt, was diese Eigenschaften bewirken? Wann würde ich zum Beispiel einen über den anderen wählen? Ich sehe, dass thar manchmalr.text ein Unicode-Objekt zurückgibt , und ich nehme an, dass es einen Unterschied für eine Nicht-Text-Antwort geben würde. Aber wo ist das alles dokumentiert? Beachten Sie, dass im verknüpften Dokument Folgendes angegeben ist:

Sie können für Nicht-Text-Anforderungen auch als Bytes auf den Antworttext zugreifen:

Aber dann zeigt es ein Beispiel für eine Textantwort! Ich kann nur annehmen, dass das obige Zitat bedeutet, non-text responsesstatt zu sagen non-text requests, da eine Nicht-Text-Anfrage in HTTP keinen Sinn ergibt.

Kurz gesagt, wo ist die richtige Dokumentation der Bibliothek im Gegensatz zum (ausgezeichneten) Tutorial auf der Python Requests-Site?

dotancohen
quelle
2
Verwandte Themen
Stevoisiak

Antworten:

144

Die Entwickleroberfläche enthält weitere Details:

r.textist der Inhalt der Antwort in Unicode und r.contentist der Inhalt der Antwort in Bytes.

Gary Kerr
quelle
46
Und wann würdest du den einen oder anderen wählen?
Multigoodverse
13
@multigoodverse: Wird vermutlich r.textfür Textantworten wie ein HTML- oder XML-Dokument und r.contentfür "binäre" Dateitypen wie ein Bild oder eine PDF-Datei bevorzugt.
Dotancohen
5
@dotancohen HTML und XML verwenden Deklarationen in den Daten, um ihre eigene Dekodierung r.contentdurchzuführen r.text. Daher sollten sie dem Rohdaten und nicht dem Verdeckten zugeführt werden .
tdelaney
Im Allgemeinen kann eine einzelne Antwort verschachtelten oder mehrteiligen Inhalt enthalten (z. B. E-Mail-Nachrichten mit Anhängen), und jeder Teil kann auf unterschiedliche Weise codiert werden. Es ist unmöglich, solche Antworten ohne Zugriff auf den Bytestream zu verarbeiten, aber es ist weit entfernt von dem üblichen Fall, in dem Sie nur korrekt decodierten Unicode-Text wünschen.
Holdenweb
Warum der Python-Interpreter beide r.textund r.contentals Texte anzeigt . Warum nicht r.contentals Text und r.textals Bits anzeigen (wenn es das ist, was es von Natur aus ist)?
Arnb
11

Aus der Dokumentation geht hervor, dass r.content

You can also access the response body as bytes, for non-text requests:

 >>> r.content

Wenn Sie weiter unten auf der Seite lesen, wird beispielsweise eine Bilddatei angesprochen

PyNEwbie
quelle
2
Danke dir. Ich sehe jetzt das kleine bvor dem ersten Beispiel mit dem Text "für Nicht-Text-Anfragen", was bedeutet, dass das Objekt ein Byte-Objekt ist. Es ist nicht klar, warum die Bytes als Text angezeigt werden, vielleicht ist das eine andere Python-Nizza, aber es ist in diesem Zusammenhang verwirrend. Vielen Dank.
Dotancohen
1
Dies scheint bei Python 3.x wichtiger zu sein als bei Python 2.x. Die Verwendung requestsin Python 3 auf page.content gibt diesen Fehler: if 'rss' in page.content:->TypeError: a bytes-like object is required, not 'str'
Marc Maxmeister