【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’ 書き込み