ペンギンが技術ブログを書いています

すぐに使えるPythonでHTTPリクエストをする方法

初回投稿: 2021年09月22日 / 最終更新: 2021年09月22日

はじめに

PythonでHTTPリクエストが必要な場面は、WebAPIと通信したいときや、Webスクレイピングをする時などたくさんあります。


そんな時に簡単にHTTPリクエストを実装する方法を紹介します。

HTTPリクエストの方法

今回は2つの方法を説明します。

方法1: Python標準ライブラリ(urllib.request)を使う方法

【メリット】
・標準ライブラリなのでインストールが不要。


【デメリット】
・方法②で紹介するrequestsライブラリよりも機能が少ない。

実際のコード

https://blog.rabadons.comからHTMLを取得する。

import urllib.request

request_url = 'https://blog.rabadons.com'

with urllib.request.urlopen(request_url) as response:
    print(response.read())

urllib.request.urlopen()の戻り値はHTTPResponseオブジェクトです。

したがって以下のようなコードで様々なデータが取得できます。

# プロトコルバーション
response.version # 10=HTTP/1.0 11=HTTP/1.1

# リクエストヘッダ
response.headers

# ステータス
response.status

# HTML
response.read()

# HTMLの最初の100バイト分を取得
response.read(100)

方法2: サードパーティのライブラリ(requests)を使う方法

【メリット】
・方法①で紹介したurllib.requestよりも機能が多い
・コードが簡潔


【デメリット】
・サードパーティなのでインストールが必要

実際のコード

まずはrequestsのインストール。

pip install requests

https://blog.rabadons.comからHTMLを取得する。

import requests

request_url = 'https://blog.rabadons.com'

response = requests.get(request_url)
response.encoding = response.apparent_encoding #正しい文字コードでするため

print(response.text)

response.encoding = response.apparent_encodingは取得したデータの文字コードを正しくセットするために処理しています。 この処理がないと、日本語のぺージを取得したときなどに文字化けしてしまいます。


requests.get()の戻り値は、requests.Responseクラスです。


# ヘッダー
response.headers

# ステータスコード
response.status_code

# 文字コード
response.encoding

# 正しい文字コード
response.apparent_encoding

# JSON(コンテンツがJSON形式の場合)
response.json()

まとめ

今回はPythonでHTTPリクエストする方法を紹介をしましたが、GETリクエストのみの説明になっています。どちらのライブラリもPOSTPUTDELETE、その他のメソッドを使用可能なので、ドキュメントを読んで実装してみましょう。


最後に各ライブラリの公式ドキュメントのリンクを記載します。


Documents - urllib.request
Documents - requests