Jaka jest różnica między „treścią” a „tekstem”


122

Używam wspaniałej biblioteki Python Requests . Zauważyłem, że dobra dokumentacja zawiera wiele przykładów tego, jak coś zrobić bez wyjaśniania dlaczego . Na przykład, zarówno r.texti r.contentsą przedstawione jako przykłady w jaki sposób uzyskać odpowiedź serwera. Ale gdzie jest wyjaśnione, co robią te właściwości? Na przykład, kiedy wybrałbym jedną z nich? Widzę, że thar czasamir.text zwraca obiekt Unicode i przypuszczam, że byłaby różnica w odpowiedzi nietekstowej. Ale gdzie jest to wszystko udokumentowane? Zwróć uwagę, że powiązany dokument podaje:

Możesz również uzyskać dostęp do treści odpowiedzi w postaci bajtów, w przypadku żądań nietekstowych:

Ale potem pokazuje przykład odpowiedzi tekstowej! Mogę tylko przypuszczać, że powyższy cytat oznacza non-text responseszamiast tego powiedzieć non-text requests, ponieważ żądanie nietekstowe nie ma sensu w HTTP.

Krótko mówiąc, gdzie jest właściwa dokumentacja biblioteki, w przeciwieństwie do (doskonałego) samouczka na stronie Python Requests?


Odpowiedzi:


144

Interfejs deweloper ma więcej szczegółów:

r.textto treść odpowiedzi w formacie Unicode i r.contentjest to treść odpowiedzi w bajtach.


46
A kiedy byś wybrał jedną lub drugą?
multigoodverse

13
@multigoodverse: Prawdopodobnie r.textbyłby preferowany w przypadku odpowiedzi tekstowych, takich jak dokument HTML lub XML, i r.contentbyłby preferowany w przypadku „binarnych” typów plików, takich jak obraz lub plik PDF.
dotancohen,

5
@dotancohen HTML i XML używają deklaracji w danych do własnego dekodowania, więc powinny być zasilane surowym r.content, a nie ukrytym r.text.
tdelaney

Mówiąc bardziej ogólnie, pojedyncza odpowiedź może zawierać zagnieżdżoną lub wieloczęściową treść (np. Wiadomości e-mail z załącznikami), a każda część może być zakodowana na różne sposoby. Niemożliwe jest obsłużenie takich odpowiedzi bez dostępu do strumienia bajtów, ale jest to dalekie od typowego przypadku, w którym chcesz po prostu poprawnie zdekodować tekst Unicode.
holdenweb

Dlaczego interpreter Pythona wyświetla oba teksty r.texti r.contentjako teksty. Dlaczego nie wyświetlać r.contentjako tekst i r.textjako bity (jeśli tak jest z natury)?
Arnb

11

Z dokumentacji jasno wynika, że ​​r. Treść

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

 >>> r.content

Jeśli czytasz dalej w dół strony, dotyczy ona na przykład pliku obrazu


2
Dziękuję Ci. Teraz widzę mały fragment bpoprzedzający pierwszy przykład z tekstem „dla żądań nietekstowych”, co oznacza, że ​​obiekt jest obiektem bajtów. Nie jest jasne, dlaczego bajty są wyświetlane jako tekst, być może jest to kolejna „drobiazg” Pythona, ale w tym kontekście jest to mylące. Dzięki.
dotancohen

1
wydaje się, że ma to większe znaczenie w Pythonie 3.x niż w Pythonie 2.x; używanie requestsw pythonie 3 na stronie. zawartość powoduje następujący błąd: if 'rss' in page.content:->TypeError: a bytes-like object is required, not 'str'
Marc Maxmeister.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.