PythonのurllibモジュールでURLを処理する方法を徹底解説
PythonはWebプログラミングの分野で広く活用されているプログラミング言語です。Webサイトにアクセスする際、私たちは「URL(Uniform Resource Locator)」と呼ばれるWebアドレスを使用します。Pythonには、URLへのリクエストを処理し、アクセス結果を受け取るための機能が標準で備わっています。本記事ではurllibモジュールを取り上げ、URLからデータを取得する際に役立つさまざまな関数について詳しく解説します。
urllibのインストール
Python環境にurllibをインストールするには、pipを使って以下のコマンドを実行します。
pip install urllib
なお、urllibはPythonの標準ライブラリに含まれているため、多くの場合は追加インストールを行わずにすぐ利用できます。
URLを開いてコンテンツを取得する
request.urlopen()メソッドを使用すると、指定したURLにアクセスし、そのコンテンツをPython環境へ読み込むことができます。
コード例
import urllib.request
address = urllib.request.urlopen('https://www.tutorialspoint.com/')
print(address.read())
実行結果
上記のコードを実行すると、次のような結果が得られます。
b'<!DOCTYPE html>\r\n<!--[if IE 8]><html class="ie ie8"> <![endif]-->\r\n………… …………………… gtag(\'config\', \'UA-232293-6\');\r\n</script>\r\n</body>\r\n</html>\r\n'
このように、read()メソッドによってWebページのHTMLソースがバイト列(bytes)として取得できていることがわかります。
urllib.parseでクエリを送信する
URLをパース(解析)して有効なURLかどうかを確認したり、検索オプションとしてクエリ文字列を渡したりすることも可能です。レスポンスの妥当性をチェックし、問題がなければレスポンス全体を出力できます。
コード例
import urllib.request
import urllib.parse
url = 'https://tutorialspoint.com'
values = {'q': 'python'}
data = urllib.parse.urlencode(values)
data = data.encode('utf-8') # データはバイト型である必要があります
print(data)
req = urllib.request.Request(url, data)
resp = urllib.request.urlopen(req)
print(resp)
respData = resp.read()
print(respData)
実行結果
上記のコードを実行すると、次のような結果が得られます。
b'q=python' <http.client.HTTPResponse object at 0x00000195BF706850> b'<!DOCTYPE html>\r\n<!--[if IE 8]><html class="ie ie8"> <![endif]………… …………………… \r\n</script>\r\n</body>\r\n</html>\r\n'
urlencode()で辞書形式のデータをクエリ文字列(q=python)に変換し、encode('utf-8')でバイト型に変換している点がポイントです。POSTリクエストとしてデータを送信する際には、このバイト変換が必須となります。
urllib.parse.urlsplitでURLを分解する
urlsplit()を使うと、URLを受け取って複数の構成要素に分解し、それぞれを後続のデータ処理に活用できます。たとえば、プログラムからURLがSSL認証されているかどうかを判定したい場合は、urlsplitでスキーム(scheme)の値を取得して判断します。以下の例では、指定したURLの各部分を確認しています。
コード例
import urllib.parse url = 'https://tutorialspoint.com/python' value = urllib.parse.urlsplit(url) print(value)
実行結果
上記のコードを実行すると、次のような結果が得られます。
SplitResult(scheme='https', netloc='tutorialspoint.com', path='/python', query='', fragment='')
出力を見ると、URLがスキーム(https)、ネットワークロケーション(tutorialspoint.com)、パス(/python)、クエリ、フラグメントという5つの要素に分解されたことがわかります。schemeが「https」であれば、SSL/TLSで保護された安全な通信であるとプログラム的に判断できるのです。
まとめ
urllibモジュールを使えば、外部ライブラリに頼らずともPythonだけでWebページの取得、クエリの送信、URLの解析といった基本的なWeb通信処理を実現できます。まずはurlopen()・urlencode()・urlsplit()の3つの基本操作をマスターし、スクレイピングやAPI連携などへの応用につなげていきましょう。
-
Pythonモジュールとは?作成方法と使い方をわかりやすく解説
モジュールは、コードを複数のファイルに分割できるPythonの便利な機能です。Pythonモジュールとは、拡張子が「.py」で終わるファイルのことです。このガイドでは、具体的な例を交えながら、Pythonモジュールの作成方法をわかりやすく解説します。Pythonモジュールの基礎知識モジュールとは、Pythonのプログラムファイルを指す言葉です。つまり、Pythonプロジェクト内にある拡張子.pyのファイルは、すべてモジュールとして扱うことができます。モジュールには関数、変数、クラスなどを含めることができ、モジュール自身が必要なライブラリをインポートすることも可能です。モジュールの3つの種類組み
-
PythonでPDFからハイパーリンク(URL)を抽出する方法
Pythonには、さまざまな処理に対応できる豊富なライブラリが揃っています。PDFからデータやメタ情報を抽出したいときに便利なのが、PyPDF2パッケージです。PyPDF2は使い方がシンプルで、PDFからのデータ抽出、ドキュメント内のキーワード検索、ハイパーリンクやURLなどのメタ情報の取得など、多彩な機能を提供しています。 この記事では、PyPDF2を使ってPDFドキュメントからハイパーリンクを抽出する方法を解説します。 ハイパーリンク抽出の手順 コマンドシェルでpip install PyPDF2を実行し、ローカル環境にPyPDF2をインストールします。 Pythonスクリプト内でPy