備忘録

【Python】Pythonのurllibの使い方

前提

Python: 3.12

urllibとは? - Python標準のWeb通信ライブラリ

urllibは、URL (Uniform Resource Locator) を扱うためのPython標準ライブラリである。URLを開いて内容を読み込むためのモジュール群を提供し、HTTPやFTPなどのプロトコルに対応している。

urllibを使うことで、Webサイトにアクセスし、HTMLファイルや画像ファイルなどのデータを取得することができる。urllibはPythonに標準で組み込まれているため、別途インストールする必要がなく、手軽に利用できる点も魅力の一つである。

urllib.requestの基本 - GETリクエストでデータを取得

urllib.requestモジュールは、URLを開いてリソースを取得するための関数を提供する。最も基本的な使い方は、urlopen()関数を使ってGETリクエストを送信し、WebページのHTMLデータを取得することである。

from urllib import request

url = 'https://www.example.com/'
response = request.urlopen(url)

html = response.read()
print(html)

上記は、https://www.example.com/にGETリクエストを送り、レスポンスオブジェクトを取得する。そして、read()メソッドを使ってレスポンスボディの内容を読み込み、変数htmlに格納する。最後に、取得したHTMLデータを出力する。

POSTリクエストを送信 - フォームデータを送信

POSTリクエストは、Webサーバにデータを送信する際に用いられる。例えば、Webフォームからデータを送信する場合や、APIにリクエストを送信する場合などに使われる。

urllib.requestモジュールを使ってPOSTリクエストを送信するには、urlopen()関数に、URLと送信するデータを渡す。データは、urllib.parse.urlencode()関数を使ってエンコードする必要がある。

from urllib import request
from urllib.parse import urlencode

url = 'https://www.example.com/login'
data = {'username': 'your_username', 'password': 'your_password'}

encoded_data = urlencode(data).encode('utf-8')

req = request.Request(url, data=encoded_data)
response = request.urlopen(req)

html = response.read()
print(html)

上記は、https://www.example.com/loginにPOSTリクエストを送信し、ログインを試みる例である。data変数に、ユーザー名とパスワードを格納し、urlencode()関数でエンコードする。その後、Requestオブジェクトを作成し、data引数にエンコードしたデータを渡す。

ヘッダー情報を設定 - User-Agentを変更

Webサイトにリクエストを送信する際、ヘッダー情報を含めることができる。ヘッダー情報には、ブラウザの種類やOS、リクエストを受け付ける言語など、様々な情報を含めることができる。

urllib.requestモジュールを使ってヘッダー情報を設定するには、Requestオブジェクトを作成し、headers引数にヘッダー情報を渡す。

from urllib import request

url = 'https://www.example.com/'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}

req = request.Request(url, headers=headers)
response = request.urlopen(req)

html = response.read()
print(html)

上記は、User-AgentをChromeに設定して、https://www.example.com/にアクセスする例である。

エラー処理 - HTTPエラーへの対処

Webサイトにアクセスする際、様々なエラーが発生する可能性がある。例えば、ページが存在しない場合 (404 Not Found) や、サーバにアクセスできない場合 (500 Internal Server Error) などである。

urllib.requestモジュールでは、HTTPエラーが発生した場合、HTTPError例外が発生する。この例外を処理することで、エラー発生時の処理を記述することができる。

from urllib import request
from urllib.error import HTTPError

url = 'https://www.example.com/not_found'

try:
    response = request.urlopen(url)
except HTTPError as e:
    print(f'HTTP Error: {e.code}')
else:
    html = response.read()
    print(html)

上記は、存在しないページにアクセスし、HTTPErrorが発生した場合にエラーコードを出力する例である。try...except構文を使って例外処理を行うことで、エラー発生時にもプログラムを正常終了させることができる。

関連記事

  • 【Python】PythonのPathlibの使い方
    前提 Python: 3.12 基本 from pathlib import Path # カレントディレクトリからの相対パス file_path = Path("my_folder/my_file.txt") # ファイルが存在するか確認 if file_path.exists(): print("ファイルは存在します
  • 【Python】Pythonのos.pathの使い方
    前提 Python: 3.12 基本 import os.path file_path = os.path.join("data", "myfile.txt") if os.path.exists(file_path): print("ファイルは存在します") else: print("ファイルは存在しません")
  • 【Python】Pythonのargparseの使い方
    前提 Python: 3.12 参考 argparse — Parser for command-line options, arguments and sub-commands — Python 3.12.3 ドキュメント Pythonでコマンドライン引数を扱うための標準モジュール argparseは、ユーザーフレン
  • 【Python】正規表現 reモジュールの使い方
    前提 Python: 3.12 参考 re — Regular expression operations — Python 3.12.3 ドキュメント 基本 import re m = re.search('a.c', 'abcdef') m.group(0) よく使う特殊文字 . 任意の一文字にマッチ a.c は “abc”, “a1c” などにマッチ * 直前の文字の0回以上の
  • 【Python】Pythonでファイルの読み書きをする
    前提 Python: 3.12 基本 with open(file_name, 'w', encoding='utf-8') as f: f.write('Sample') 参考 7.2. ファイルを読み書きする — 7. 入力と出力 — Python 3.12.3 ドキュメント モードの指定 ‘r’ 読み込み用に開く (デフォルト) ‘w’ 書き込み