Estoy usando la fabulosa biblioteca Python Requests . Noto que la buena documentación tiene muchos ejemplos de cómo hacer algo sin explicar el por qué . Por ejemplo, ambos r.text
y r.content
se muestran como ejemplos de cómo obtener la respuesta del servidor. Pero, ¿dónde se explica qué hacen estas propiedades? Por ejemplo, ¿cuándo elegiría uno sobre el otro? Veo que r.text
a veces devuelve un objeto Unicode , y supongo que habría una diferencia para una respuesta sin texto. Pero, ¿dónde está documentado todo esto? Tenga en cuenta que el documento vinculado dice:
También puede acceder al cuerpo de la respuesta como bytes, para solicitudes que no sean de texto:
¡Pero luego pasa a mostrar un ejemplo de una respuesta de texto! Solo puedo suponer que la cita anterior significa decir en non-text responses
lugar de non-text requests
, ya que una solicitud sin texto no tiene sentido en HTTP.
En resumen, ¿dónde está la documentación adecuada de la biblioteca, a diferencia del (excelente) tutorial en el sitio de Python Requests?
fuente
Respuestas:
La interfaz de desarrollador tiene más detalles:
r.text
es el contenido de la respuesta en Unicode yr.content
es el contenido de la respuesta en bytes.fuente
r.text
se preferiría para respuestas textuales, como un documento HTML o XML, yr.content
sería preferible para tipos de archivo "binarios", como una imagen o un archivo PDF.r.content
, no encubiertosr.text
.r.text
yr.content
como textos. ¿Por qué no mostrarser.content
como texto yr.text
como bits (si eso es lo que es inherentemente)?Parece claro a partir de la documentación que r.content
Si lee más abajo en la página, se trata, por ejemplo, de un archivo de imagen.
fuente
b
precede al primer ejemplo con el texto "para solicitudes que no son de texto", lo que significa que el objeto es un objeto de bytes. No está claro por qué los bytes se muestran como texto, tal vez esa sea otra 'sutileza' de Python, pero es confuso en este contexto. Gracias.requests
en python 3 en page.content da este error:if 'rss' in page.content:
->TypeError: a bytes-like object is required, not 'str'