Quelle est la différence entre "contenu" et "texte"

122

J'utilise la formidable bibliothèque de requêtes Python . Je remarque que la belle documentation contient de nombreux exemples sur la façon de faire quelque chose sans expliquer pourquoi . Par exemple, les deux r.textet r.contentsont présentés comme des exemples de la façon d'obtenir la réponse du serveur. Mais où est-il expliqué ce que font ces propriétés? Par exemple, quand devrais-je choisir l'un plutôt que l'autre? Je vois que cela r.textrenvoie parfois un objet Unicode , et je suppose qu'il y aurait une différence pour une réponse non textuelle. Mais où tout cela est-il documenté? Notez que le document lié indique:

Vous pouvez également accéder au corps de la réponse sous forme d'octets, pour les demandes non textuelles:

Mais ensuite, il montre un exemple de réponse textuelle! Je ne peux que supposer que la citation ci-dessus signifie dire non-text responsesau lieu de non-text requests, car une demande non textuelle n'a pas de sens en HTTP.

Bref, où est la bonne documentation de la bibliothèque, par opposition au (excellent) tutoriel sur le site Requêtes Python?

dotancohen
la source

Réponses:

144

L' interface développeur a plus de détails:

r.textest le contenu de la réponse en Unicode et r.contentest le contenu de la réponse en octets.

Gary Kerr
la source
46
Et quand choisiriez-vous l'un ou l'autre?
multigoodverse
13
@multigoodverse: r.textserait probablement préférable pour les réponses textuelles, comme un document HTML ou XML, et r.contentserait préférable pour les types de fichiers «binaires», comme une image ou un fichier PDF.
dotancohen
5
@dotancohen HTML et XML utilisent des déclarations dans les données pour effectuer leur propre décodage et doivent donc être alimentés au brut r.content, pas au caché r.text.
tdelaney
Plus généralement, une seule réponse peut contenir du contenu imbriqué ou en plusieurs parties (comme des messages électroniques avec pièces jointes), et chaque partie peut être codée de différentes manières. Il est impossible de gérer de telles réponses sans accès au flux d'octets, mais c'est loin du cas courant, où vous voulez juste du texte Unicode correctement décodé.
holdenweb
Pourquoi l'interpréteur python affiche à la fois r.textet r.contentsous forme de textes. Pourquoi ne pas afficher r.contentsous forme de texte et r.textde bits (si c'est ce que c'est intrinsèquement)?
Arnb
11

Il semble clair d'après la documentation que r.content

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

 >>> r.content

Si vous lisez plus bas la page, elle adresse par exemple un fichier image

PyNEwbie
la source
2
Je vous remercie. Je vois maintenant le petit bprécédant le premier exemple avec le texte "pour les demandes non textuelles", ce qui signifie que l'objet est un objet octets. On ne sait pas pourquoi les octets sont affichés sous forme de texte, peut-être que c'est une autre «gentillesse» de Python, mais c'est déroutant dans ce contexte. Merci.
dotancohen
1
cela semble avoir plus d'importance avec python 3.x qu'avec python 2.x; l'utilisation requestsde python 3 sur page.content donne cette erreur: if 'rss' in page.content:->TypeError: a bytes-like object is required, not 'str'
Marc Maxmeister