PythonでWebページを読み出す

技術情報

Pythonを利用すると、Webページを読み出すプログラムが簡単に作れます。

Webページの内容を読み出す

サンプルとして、前に作った 「IPアドレスを調べるページ」を読み出すPythonスクリプトを書いてみましょう。

次にコードを示します。ファイル名「get-web.py」で保存してください。

from urllib.request import urlopen

try:
    url = "https://webservice.tokyo/p/ip.php"
    web = urlopen(url)
    data = web.read()
    web.close()

    text = data.decode("utf-8")
    print(text, end="")

except Exception as ex:
    print(ex.__class__.__name__, ":", ex.reason)

Windowsのコマンドプロンプトを起動し、このスクリプトを実行すると、次のように自分のIPアドレスが表示されます。

C>py get-web.py
157.7.107.131

WebページのHTTPヘッダを読み出す

Webサイトをチェックするとき、ページの中身データの他に、HTTPヘッダの情報を知りたい場合も多々あります。

そこで今度は、WebページのHTTPヘッダを表示するスクリプトを書いてみましょう。ファイル名を「head-web.py」とします。

from urllib.request import urlopen

try:
    url = "https://webservice.tokyo/p/ip.php"
    web = urlopen(url)
    headers = web.getheaders()
    web.close()

    for (key, val) in headers:
        print(key, ":", val)

except Exception as ex:
    print(ex.__class__.__name__, ":", ex.reason)

このスクリプトを実行すると、次のようにWebページのHTTPヘッダが表示されます。

C>py head-web.py
Date : Thu, 13 Feb 2020 15:37:58 GMT
Content-Type : text/html; charset=UTF-8
Content-Length : 15
Connection : close
X-Powered-By : PHP/7.3.10
Vary : Range
Accept-Ranges : none
Server : Apache

というわけで、Webページの内容や、そのHTTPヘッダを表示するPythonスクリプトを紹介しました。

今回はWebページのURLをコード中に 決め打ちで書きましたが、ここをキーボードから入力できる形にすると、ちょっと便利なツールになりそうです。そのうち機会があれば、そのへんの方法についても説明したいと思います。

技術情報

今回のスクリプトに関する備忘メモです。想定読者は1年後の自分です。

  • urlopen関数:Webページを開く
    Webサイトにアクセスするには、urllib.requestモジュールのurlopen関数を利用する。詳しくはPython公式ドキュメントを参照。
    https://docs.python.org/ja/3/library/urllib.request.html
  • read関数:Webページの内容を読み出す
    urlopen関数で開いたWebページの内容を得るには、read関数を利用する。得られるのはバイナリデータ(byte配列)であり、文字列として扱うにはバイナリから文字列への変換(decode)が必要になる。
  • decode関数:byte配列を文字列に変換する
    byte配列を文字列化する。get-web.py ではdataの文字コードはUTF-8だと決め打ちした。汎用的なWeb読み出しツールを作るなら、ここは工夫が必要であろう。
  • getheaders関数:WebページのHTTPヘッダを読み出す
    urlopen関数で開いたWebページのHTTPヘッダを得るには、getheaders関数を利用する。 得られるのは(項目名, 値)のリストである。

コメント

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