リクエストモジュール - レスポンスオブジェクトのテキストとコンテンツの違い

GETリクエストを送信する

  1. 要件: ページのソース コードを取得するためのリクエストを通じて、Baidu ホームページにリクエストを送信します。
  2. 次のコードを実行し、出力結果を確認します。

Requests を使用して GET リクエストを送信するのは非常に簡単で、requests.get()メソッドを呼び出すだけです。例えば:

# 导入requests库
import requests

# 目标url
url = 'https://www.baidu.com' 

# 向百度发送GET请求,并获取响应对象
response = requests.get(url)

# 打印响应对象的文本内容,即百度网站的HTML源码
print(response.text)

上記のコードは に GET リクエストを送信しhttp://www.baidu.com、応答を出力します。

観察中に、返されたデータには次のような特徴があることがわかりました。乱码

ここに画像の説明を挿入

上記のコードを実行した結果を観察すると、文字化けが多く発生していることがわかりました。これは、エンコードとデコードで使用される文字セットが異なることが原因であるため、次の方法で中国語の文字化けの問題を解決しようとします。

# 导入requests库
import requests 

# 目标url
url = 'https://www.baidu.com' 

# 向目标url发送get请求
response = requests.get(url)

# 打印响应内容
# print(response.text)
print(response.content.decode()) # 注意这里!

ここに画像の説明を挿入

知識開発

リクエストのresponse.textとresponse.contentの違いは何ですか

Python のリクエスト ライブラリを使用してリクエストを送信する場合、response.text()またはresponse.content()メソッドを使用して応答コンテンツを取得できます。これら 2 つのメソッドの違いは、返されるデータ型です。

response.text()
  • タイプ:str
  • デコード タイプ: HTTP ヘッダー、推測されたテキスト エンコーディングに基づいて、応答のエンコーディングを経験に基づいて推測します。
  • エンコード方法を変更する方法:response.encoding="gbk"

response.text()このメソッドは、通常、テキスト情報を処理するために使用される Unicode 形式の文字列を返します。応答コンテンツが XML や HTML などのテキスト形式の場合、response.text()メソッドを使用するとデータを簡単に解析して処理できます。

このメソッドを使用する場合response.text()、応答のヘッダーでエンコード方式が指定されていない場合、リクエスト ライブラリは自動的に応答のエンコード方式を推測し、応答コンテンツを Unicode 形式で返します。ただし、requests ライブラリは、エンコード投機用の chartet モジュールをベースとしているため、一定の判断を誤る可能性があることに注意してください。

また、応答内容がテキストデータではなくバイナリデータの場合、メソッドが文字response.text()化けしたり例外をスローしたりするため、特に注意が必要です。

response.content()
  • タイプ:bytes
  • デコードタイプ: 指定なし
  • エンコード方法を変更する方法:response.content.decode("utf-8")

response.content()このメソッドは、画像、オーディオ、ビデオなどのマルチメディア ファイルの処理に適したバイナリ形式でデータを返します。response.content()応答内容をローカルに直接保存し、元のバイナリ データを保持するメソッドを使用します。

response.content()このメソッドは元のバイト文字列を返し、エンコード メソッドは解析および変換されないことに注意してください。文字列にデコードする必要がある場合は、bytes オブジェクトの decode() メソッドを使用して正しいエンコード方法を指定する必要があります。たとえば、response.content.decode のデフォルトは utf-8 であるため、response.content.decode("utf-8")直接使用することもできます。response.content.decode()

さらに、response.content()メソッドによって返されたデータは、追加のエンコードおよびデコード操作を行わずに、ローカルに直接保存したり、バイナリ形式で他のシステムに送信したりすることができます。

まとめると、テキスト情報の処理に適した使用法であり、バイナリデータの処理に適したresponse.text()使用法となります。response.content()これら 2 つの方法を使用する場合は、データ型とエンコード方法の一致に注意する必要があります。

おすすめ

転載: blog.csdn.net/m0_67268191/article/details/131754269
おすすめ