'İçerik' ve 'metin' arasındaki fark nedir


122

Harika Python İstekleri kitaplığını kullanıyorum. İyi belgelerin nedenini açıklamadan bir şeyin nasıl yapılacağına dair birçok örneği olduğunu fark ettim . Örneğin, her ikisi de ve sunucu yanıtının nasıl alınacağına dair örnekler olarak gösterilir . Ama bu özelliklerin ne işe yaradığı nerede açıklanıyor? Örneğin, birini diğerine ne zaman seçerim? Bazen thar'ın bir unicode nesnesi döndürdüğünü görüyorum ve metin olmayan bir yanıt için bir fark olacağını düşünüyorum. Peki tüm bunlar nerede belgeleniyor? Bağlantılı belgenin şunu ifade ettiğini unutmayın:r.textr.contentr.text

Metin olmayan istekler için yanıt gövdesine bayt olarak da erişebilirsiniz:

Ama sonra bir metin yanıtı örneği göstermeye devam ediyor! Metin olmayan bir istek HTTP'de bir anlam ifade etmediğinden , yalnızca yukarıdaki alıntı non-text responsesyerine söylemek anlamına geldiğini varsayabilirim non-text requests.

Kısacası, Python İstekleri sitesindeki (mükemmel) eğiticinin aksine kitaplığın uygun dokümantasyonu nerede ?


Yanıtlar:


144

Geliştirici arayüzü daha fazla bilgi içeren:

r.textUnicode'daki yanıtın r.contentiçeriği ve bayt cinsinden yanıtın içeriğidir.


46
Ve ne zaman birini veya diğerini seçersiniz?
multigoodverse

13
@multigoodverse: Muhtemelen r.textHTML veya XML belgesi gibi metinsel yanıtlar r.contentiçin tercih edilir ve görüntü veya PDF dosyası gibi "ikili" dosya türleri için tercih edilir .
dotancohen

5
@dotancohen HTML ve XML, kendi kod çözme işlemlerini yapmak için verilerdeki bildirimleri kullanır ve bu nedenle örtülü r.contentdeğil ham olarak beslenmelidir r.text.
tdelaney

Daha genel olarak, tek bir yanıt, yuvalanmış veya çok parçalı içerik (ekleri olan e-posta iletileri gibi) içerebilir ve her bölüm farklı şekillerde kodlanmış olabilir. Bayt akışına erişim olmadan bu tür yanıtları işlemek imkansızdır, ancak yalnızca doğru bir şekilde çözülmüş Unicode metni istediğiniz yaygın durumdan çok uzaktır.
holdenweb

Neden piton tercüman gösterileri hem r.textve r.contentsıra metinler. Neden r.contentmetin ve r.textbit olarak gösterilmiyor (eğer doğası gereği buysa)?
Arnb

11

Belgelerden anlaşılıyor ki, r.content

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

 >>> r.content

Sayfanın ilerleyen kısımlarını okursanız, örneğin bir resim dosyası


2
Teşekkür ederim. Şimdi, b"metin olmayan istekler için" metninin olduğu ilk örnekten önceki küçük örneği görüyorum, bu, nesnenin bir bayt nesnesi olduğu anlamına gelir. Baytların neden metin olarak görüntülendiği açık değil, belki de bu başka bir Python 'nezaketidir', ancak bu bağlamda kafa karıştırıcı. Teşekkürler.
dotancohen

1
bu, python 3.x için python 2.x'ten daha önemli görünüyor; kullanarak requestsbu hata page.content üzerinde piton 3'te verir: if 'rss' in page.content:->TypeError: a bytes-like object is required, not 'str'
Marc Maxmeister
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.