2016-10-20 2 views
3

Requestsの応答を解析するのに、res.contentまたはres.textを使用することがあります。私が持っていた使用例では、どのオプションを使用したかは問題にはならなかった。リクエストレスポンスの解析時に.textまたは.contentを使用する必要がありますか?

.contentまたは.textでHTMLを解析する主な違いは何ですか?例:上記のような状況で

import requests 
from lxml import html 
res = requests.get(...) 
node = html.fromstring(res.content) 

、私はres.contentまたはres.textを使用すべきですか?それぞれを使うときの良い経験則は何ですか? documentationから

答えて

5

あなたが要求を行うと、要求はHTTPヘッダーに基づいて、応答の エンコーディングについて教育推測をします。 r.textにアクセスすると、Requestによって推測される のテキストエンコーディングが使用されます。あなたはどのようなエンコーディングの要求が使用している を見つけると、r.encoding プロパティを使用して、それを変更することができます

>>> r.encoding 
'utf-8' 
>>> r.encoding = 'ISO-8859-1' 

あなたはエンコーディングを変更する場合は、呼び出すたび、要求が r.encodingの新しい値を使用します。 r.text。 のコンテンツをエンコードする特別なロジックを適用することができる場合は、 の状況でこれを行うことができます。たとえば、HTTPとXMLには、 のエンコーディングが指定されています。 のような状況では、r.contentを使用してエンコーディングを見つけ、 r.encodingと設定する必要があります。これにより、r.textを正しいエンコーディングで使用できるようになります。

したがってr.contentは、サーバーがバイナリデータまたは偽のエンコーディングヘッダーを返すときに使用され、メタタグ内で正しいエンコーディングを検索しようとします。

+0

もう少し読むと、応答がテキストではなくバイナリ*の場合は、 '.content'も使用します。 –

関連する問題