「URLからサイトのIPアドレスを取得したい」
このことをPythonで実現します。
それも標準ライブラリだけを使って対応します。
つまり、他のライブラリをインストールせずに対応するということです。
本記事の内容
- サイトURLからドメイン(ホスト)を取得する
- ドメインからIPを取得する
- 【サンプルコード】サイトURLからIPアドレスを取得する
それでは、上記に沿って解説していきます。
サイトURLからドメイン(ホスト)を取得する
Example Domain
https://example.com/
まずは、上記サイトを例にして言葉(キーワード)を定義します。
定義というより、実データで説明すると言った方が適切かもしれません。
キーワード | 実データ |
サイトURL | https://example.com/ |
ドメイン(ホスト) | example.com |
IPアドレス | 93.184.216.34 |
IPアドレスは、下記ツールの結果を参照。
ドメイン/IPアドレス サーチ 【whois情報検索】
https://www.cman.jp/network/support/ip.html
言葉の定義が明確になったので、説明を進めます。
サイトURLからドメイン(ホスト)を取得するには、urllib.parseモジュールを利用します。
urllib.parseモジュール
正直、正規表現でドメインだけ抽出することは可能です。
実際、過去にそのようなことをしたこともあります。
でも、Python標準ライブラリで便利なモノが用意されています。
それなら、その便利なモノを使う方がよいでしょう。
そして、その便利なモノがurllib.parseモジュールになります。
urllib.parseモジュールの機能は、URLを解析して構成要素にすることです。
実際の動作を確認しましょう。
from urllib.parse import urlparse url = "https://example.com/category/123/?a=1&b=2#pppp" parsed_url = urlparse(url) print(parsed_url)
上記を実行した結果は、以下。
ParseResult(scheme='https', netloc='example.com', path='/category/123/', params='', query='a=1&b=2', fragment='pppp')
これは、地味に便利ですね。
個別に値を取得する場合は、次のようにします。
from urllib.parse import urlparse url = "https://example.com/category/123/?a=1&b=2#pppp" parsed_url = urlparse(url) print(parsed_url.scheme) print(parsed_url.netloc) print(parsed_url.path) print(parsed_url.params) print(parsed_url.query) print(parsed_url.fragment)
上記の実行結果は、以下。
https example.com /category/123/ a=1&b=2 pppp
簡単ですね。
まとめ
urllib.parseモジュールを使うと、簡単にドメインを取得できます。
別途ライブラリをインストールする必要もないので、気楽に使えます。
念のために、コードを整理しておきます。
from urllib.parse import urlparse url = "https://example.com/" parsed_url = urlparse(url) domain = parsed_url.netloc
上記のコードでURLからドメインを取得できます。
それも、追加でライブラリも必要としません。
以上、サイトURLからドメインを取得する方法について説明しました。
次は、ドメインからIPを取得していきます。
ドメインからIPを取得する
ドメインがあれば、IPアドレスを取得できます。
そのためには、socketモジュールを用います。
socketモジュールとは、Python標準ライブラリです。
そのため、別途ライブラリをインストールする必要がありません。
socketモジュールは、オペレーティングシステムのソケットAPIを利用しています。
OS(プラットフォーム)に依存すると言えます。
ただ、以下のOSすべてで動作します。
- Windows
- Linux
- macOS
機能としては、ネットワーク関連のサービスを提供しています。
そして、今回はその中のgethostbyname()関数を利用します。
ホスト名は、ドメインのことです。
実際には、以下のように使います。
import socket domain = "example.com" ip = socket.gethostbyname(domain) print(ip)
上記の実行結果は、以下。
93.184.216.34
【whois情報検索】と同じ結果になりました。
以上、ドメインからIPを取得する方法について説明しました。
最後に、プログラムを整理して動かしてみましょう。
【サンプルコード】サイトURLからIPアドレスを取得する
urllib.parseモジュールを使って、サイトURLからドメインを取得可能です。
そして、socketモジュールを使って、ドメインからIPアドレスを取得できます。
このことを上記で確認してきました。
これらの処理をまとめたのが、以下のサンプルコードになります。
from urllib.parse import urlparse import socket url = "https://example.com/" parsed_url = urlparse(url) domain = parsed_url.netloc ip = socket.gethostbyname(domain) print(ip)
上記を実行した結果は、以下となります。
93.184.216.34
追加でライブラリをインストールする必要がありません。
これが何より、ありがたいです。
Pythonには便利なライブラリがたくさん公開されています。
そして、簡単にインストールもできます。
でも、標準ライブラリでも十分にいろいろなことに対応できます。
依存関係や処理速度を考えたら、標準ライブラリで対応する方がベターなはずです。
「まずは、標準ライブラリを調べる」
このことを意識していきたいモノですね。