Pythonのurllib.parseモジュール徹底解説 — URLの分解・結合・エンコード方法
urllib.parseモジュールは、URL(Uniform Resource Locator)文字列を構成要素に分解したり、逆に各コンポーネントを組み合わせて1つのURL文字列を生成したりするための標準的なインターフェースを提供します。また、「ベースURL」を基準として「相対URL」を絶対URLへ変換する機能も備えています。
このモジュールがサポートしている主なURLスキームは以下のとおりです。
- file
- ftp
- gopher
- hdl
- http / https
- imap
- mailto
- mms
- news / nntp / snews
- prospero
- rsync
- rtsp / rtspu
- sftp / shttp
- sip / sips
- svn / svn+ssh
- telnet
- wais
- ws / wss
urlparse()関数
urlparse()は、URLを6つのコンポーネントに分解し、6要素のタプルを返す関数です。この構造は一般的なURLの形式に対応しています。各タプルの要素は文字列であり、それ以上細かく分割されることはありません(例:ネットワーク上の位置情報「netloc」は1つの文字列として扱われます)。また、「%」によるエスケープシーケンスは展開されません。
戻り値はタプルのサブクラスのインスタンスで、以下の属性を持ちます。
| 属性 | インデックス | 値 | 存在しない場合の値 |
|---|---|---|---|
| scheme | 0 | URLスキームの指定子 | schemeパラメータ |
| netloc | 1 | ネットワーク上の位置(ドメインなど) | 空文字列 |
| path | 2 | 階層的なパス | 空文字列 |
| params | 3 | 最後のパス要素に対するパラメータ | 空文字列 |
| query | 4 | クエリコンポーネント | 空文字列 |
| fragment | 5 | フラグメント識別子 | 空文字列 |
| username | - | ユーザー名 | None |
| password | - | パスワード | None |
| hostname | - | ホスト名(小文字) | None |
| port | - | ポート番号(整数、指定がある場合) | None |
使用例
>>> from urllib.parse import urlparse >>> url = 'https://mail.google.com/mail/u/0/?tab=rm#inbox' >>> t = urlparse(url) ParseResult(scheme='https', netloc='mail.google.com', path='/mail/u/0/', params='', query='tab=rm', fragment='inbox')
urlunparse()関数
urlunparse()は、urlparse()が返したタプルからURL文字列を再構築する関数です。引数には6つの要素を持つ任意のイテラブルを渡せます。
>>> from urllib.parse import urlunparse >>> urlunparse(t) 'https://mail.google.com/mail/u/0/?tab=rm#inbox'
urlsplit()関数
urlsplit(urlstring, scheme='', allow_fragments=True)は、urlparse()と似ていますが、paramsをURLから分離しない点が異なります。戻り値は5要素のタプル(スキーム、ネットワーク上の位置、パス、クエリ、フラグメント識別子)です。
>>> from urllib.parse import urlsplit >>> urlsplit(url) SplitResult(scheme='https', netloc='mail.google.com', path='/mail/u/0/', query='tab=rm', fragment='inbox')
urlunsplit()関数
urlunsplit()は、urlsplit()が返したタプルの要素を組み合わせて、完全なURL文字列を生成します。
また、このモジュールにはURL引用(クォート)関数群も含まれています。これらはプログラム上のデータを安全なURLコンポーネントとして扱えるように、特殊文字をクォートしたり、非ASCIIテキストを適切にエンコードしたりする役割を担います。
quote()関数
quote()は、文字列内の特殊文字を「%xx」形式のエスケープシーケンスに置き換えます。英字、数字、および「_.-~」の各文字は決してクォートされません。
>>> from urllib.parse import quote >>> q = quote(url) >>> q 'https%3A//mail.google.com/mail/u/0/%3Ftab%3Drm%23inbox'
quote_plus()関数
quote_plus()はquote()と同様ですが、さらにスペースをプラス記号(+)に置き換えます。これは、URLに埋め込むクエリ文字列を構築する際に、HTMLフォームの値をクォートするために必要な処理です。
unquote()関数
unquote()は、「%xx」形式のエスケープシーケンスを対応する単一の文字に戻します。quote()の逆変換を行う関数です。
>>> from urllib.parse import unquote >>> unquote(q) 'https://mail.google.com/mail/u/0/?tab=rm#inbox'
urlencode()関数
urlencode()は、マッピングオブジェクト(辞書など)または2要素タプルのシーケンスを、パーセントエンコードされたASCIIテキスト文字列に変換します。結果の文字列は、「&」記号で区切られた一連の「key=value」ペアとなります。
>>> from urllib.parse import urlencode
>>> qry = {"name": "Rajeev", "salary": 20000}
>>> urlencode(qry)
'name=Rajeev&salary=20000'
-
【Python】Pandasのデータをセット(set)に型キャストする方法
Pandasの列データをセット(set)に変換したい場合は、Python組み込みのset()関数を使用します。セットに変換することで重複した値が自動的に除去され、和集合や積集合などの集合演算も簡単に行えるようになります。 まずは、サンプルとして使用するDataFrameを作成しましょう。 dataFrame = pd.DataFrame( { EmpName: [John, Ted, Jacob, Scarlett, Ami, Ted, Scarlett], Zone: [North, South, South, East, West, East, North
-
Python(tkinter)でプログラムからURLを開く方法|webbrowserモジュールの使い方
Pythonには、さまざまな用途に活用できる豊富なライブラリや拡張モジュールが用意されています。Webベースのコンテンツを扱う際には、Python標準のwebbrowserモジュールが便利です。このモジュールを利用することで、アプリケーションからWebブラウザを起動し、Webコンテンツを表示する環境を簡単に構築できます。 webbrowserモジュールはPythonの標準ライブラリとして同梱されているため、通常は追加インストール不要ですぐに使えます。まず、以下のようにインポートして動作を確認してみましょう。 import webbrowser もし環境によってモジュールが見つからない場合は、以