GETリクエストを送信する
- 要件: ページのソース コードを取得するためのリクエストを通じて、Baidu ホームページにリクエストを送信します。
- 次のコードを実行し、出力結果を確認します。
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 つの方法を使用する場合は、データ型とエンコード方法の一致に注意する必要があります。