※このページではアフィリエイト広告を利用しています

【Python応用】urllib.parseモジュールとはURLを自在に操作!urllib.parseの使い方ガイド

Python

PythonでWebスクレイピングを行うとき、URLを解析したり結合したり、エンコードしたりする必要がよくあります。そんなときに大活躍するのが、Python標準ライブラリのひとつである urllib.parse モジュールです。

この記事では、urllib.parseの基本的な使い方と具体的な活用方法を、初心者向けにわかりやすく解説します。

スポンサーリンク
スポンサーリンク

urllib.parseモジュールとは?

urllib.parseは、URLを「部品」に分解して取得したり、逆にURLを組み立てたり、URLの中に使われている特殊文字(日本語や記号など)をエンコード(変換)するためのモジュールです。

例えば、以下のようなことができます:

  • URLのクエリ文字列を辞書に変換/作成
  • URLをスキームやドメイン、パスなどに分割
  • ベースURLと相対パスを結合して絶対パスに変換

URLを解析する ⇒ urlparse()

まずは、URLの各パーツを確認してみましょう。

使用例

from urllib.parse import urlparse

url = 'https://www.hobby-happymylife.com/'
parsed = urlparse(url)

print(parsed)

出力結果

ParseResult(scheme='https', netloc='www.hobby-happymylife.com', path='/', params='', query='', fragment='')

解説

属性名意味
schemeプロトコルの種類httpshttpなど
netlocドメイン+ポートwww.example.com
pathURLのパス部分/articles/index.html
paramsパスに対する追加情報(ほとんど使わない)
queryクエリパラメータ?page=1 など
fragmentハッシュ(#)以降の部分#section1

ちょっと便利な属性も!

  • parsed.hostname: ホスト名(小文字)
  • parsed.port: ポート番号(あれば)
  • parsed.username, parsed.password: 認証情報(あれば)

相対パスを結合する ⇒ urljoin

Webページ上のリンクや画像のURLは、しばしば相対パスになっています。

そのときに、ベースURL(ホームURL)と相対パスを結合して完全なURLを作るのが urljoin() です。

使用例

from urllib.parse import urljoin

base_url = 'https://www.hobby-happymylife.com/'

url_python = urljoin(base_url, '%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0/python/')
url_img = urljoin(base_url, '/wp-content/uploads/2020/01/sample.png')

print(url_python)
print(url_img)

出力結果

https://www.hobby-happymylife.com/プログラミング/python/
https://www.hobby-happymylife.com/wp-content/uploads/2020/01/sample.png

ポイント:
相対パスを絶対パスに変換して、正しいURLを取得できます。
スクレイピングで画像URLやリンクを取得するときに便利!

クエリパラメータのエンコード ⇒ urlencode()

検索フォームやログインなど、URLの末尾に「?name=hoge&page=1」といった文字列を付ける場面では、辞書データをURL形式の文字列に変換する必要があります。

それをやってくれるのが urlencode() です。

使用例

from urllib.parse import urlencode

params = {
    "name": "田中",   # 日本語もOK
    "page": 3
}

encoded = urlencode(params)
print(encoded)

出力結果

name=%E7%94%B0%E4%B8%AD&page=3

これは、URLに使える文字に変換された「URLエンコードされた文字列」です。

url = "https://example.com/search?" + encoded
print(url)
# https://example.com/search?name=%E7%94%B0%E4%B8%AD&page=3

ポイント:

  • 日本語や記号を安全にURLに含めるにはエンコードが必要
  • urlencode() は辞書を受け取り、URL用に自動変換してくれる

エラーに注意!

まとめ

機能関数説明
URLを解析urlparse()URLの構成要素を取得
URLを結合urljoin()ベースURL + 相対パスで完全なURL
クエリを生成urlencode()辞書をURL形式の文字列に変換

関連記事リンク


これからスクレイピングの勉強を始めたい方には以下の書籍がおすすめです。基本的な技術やサンプルコードが多くあるので、勉強がし易いです。

タイトルとURLをコピーしました