Яка різниця між "вмістом" та "текстом"


122

Я використовую приголомшливу бібліотеку запитів Python . Я помічаю, що в тонкій документації є багато прикладів того, як щось зробити, не пояснюючи чому . Наприклад, і те, r.textі r.contentпоказано як приклади того, як отримати відповідь сервера. Але де пояснено, що ці властивості роблять? Наприклад, коли я б обрав один над іншим? Я бачу, що thar r.textповертає об'єкт unicode іноді , і я гадаю, що для нетекстової відповіді буде різниця. Але де це все документально зафіксовано? Зауважте, що пов'язаний документ містить:

Ви також можете отримати доступ до тіла відповіді у вигляді байтів для нетекстових запитів:

Але потім продовжується показ прикладу текстової відповіді! Я можу лише припустити, що цитата вище означає сказати non-text responsesзамість non-text requests, оскільки безтекстовий запит не має сенсу в HTTP.

Коротше кажучи, де належна документація про бібліотеку, на відміну від (відмінного) підручника на веб-сайті Python Requests?


Відповіді:


144

Інтерфейс розробника має більше деталей:

r.text- це вміст відповіді в Unicode, і r.contentце вміст відповіді в байтах.


46
А коли б ви вибрали те чи інше?
багатоповерховий

13
@multigoodverse: Імовірно r.text, буде віддано перевагу текстовим відповідям, таким як HTML або XML-документ, і r.contentвін буде кращим для "бінарних" файлів, таких як зображення або PDF-файл.
dotancohen

5
@dotancohen HTML і XML використовують декларації в даних, щоб зробити власне розшифровку, і тому їх слід подавати в сирому вигляді r.content, а не в кришці r.text.
tdelaney

Більш загально, одна відповідь може містити вкладений або багаточастинний вміст (наприклад, повідомлення електронної пошти із вкладеннями), і кожна частина може бути закодована по-різному. Неможливо обробити такі відповіді без доступу до потоку байтів, але це далеко не звичайний випадок, де ви просто хочете правильно декодований текст Unicode.
holdenweb

Чому інтерпретатор пітона показує r.textі r.contentтексти, і як. Чому б не показати r.contentяк текст і r.textяк біти (якщо це саме по суті)?
Арнб

11

З документації видно, що r.content

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

 >>> r.content

Якщо ви читаєте далі на сторінці, вона адресується, наприклад, файл зображення


2
Дякую. Тепер я бачу малий, що bпередує першому прикладу з текстом "для нетекстових запитів", що означає, що об'єкт є об'єктом байтів. Незрозуміло, чому байти відображаються як текст, можливо, це ще одна «нізота» Python, але в цьому контексті це заплутано. Дякую.
dotancohen

1
це, мабуть, має значення більше з python 3.x, ніж python 2.x; використання requestsв python 3 на page.content видає цю помилку: if 'rss' in page.content:->TypeError: a bytes-like object is required, not 'str'
Марк Максмайстер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.