以前作ったPythonスクリプトを改造し、WebページのURLを指定できるようにしてみました。興味のある方はごらんください。 コードの使用・改造・流用は、ご自由にどうぞ。
Webページ本体を取得するPythonスクリプト
まずWebページ本体を取得するスクリプトです。ファイル名を「webget.py」とします。
from urllib.request import urlopen
from sys import argv, stdout
from re import search, I
try:
if (len(argv) >= 3) and (argv[1] == "-b"):
url = argv[2]
mode = "bin"
elif len(argv) >= 2:
url = argv[1]
mode = "text"
else:
print("Usage: webget [-b] URL")
print(" -b : force binary mode")
exit(0)
web = urlopen(url)
mediatype = web.getheader("content-type")
data = web.read()
web.close()
if mediatype.startswith("text/") and (mode == "text"):
match = search(r'charset\s*=\s*(.*)', mediatype, flags=I)
charset = match.group(1) if match else "utf-8"
text = data.decode(charset, errors="ignore")
print(text, end="")
else:
stdout.buffer.write(data)
except Exception as ex:
print(ex.__class__.__name__, ":", ex)
使い方は、次のようにコマンドライン引数としてURLを指定します。
C>py webget.py https://webservice.tokyo/p/ip.php
157.7.107.131
いろいろなタイプのデータを取得できるように、Content-Typeヘッダでテキストとバイナリを振り分けています。
テキストデータはContent-Typeのcharsetをチェックすることで、適切な文字コード変換を加えて文字列化します。
バイナリは生のデータをそのまま出力するので、画像なども次のようにファイルに書き込むことで、きちんと取得できます。
C>py webget.py https://webservice.tokyo/p/ok-robo.png > ok-robo.png
またテキストであっても 「-b」オプションを指定すると、文字コードをいじらない生のデータを出力します。これは文字コードの自動判定が失敗し文字化けするときのチェックなどに利用できます。
C>py webget.py -b https://webservice.tokyo/p/euc-jp.txt > euc-jp.txt
HTTPヘッダを取得するPythonスクリプト
2つめは、WebページのHTTPヘッダを表示するスクリプトです。こちらのファイル名を「webhead.py」とします。
from urllib.request import urlopen
from sys import argv
try:
if len(argv) < 2:
print("Usage: webhead URL\n")
exit(0)
url = argv[1]
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)
こちらも次のようにコマンドライン引数でURLを指定するだけです。
C>py webhead.py https://webservice.tokyo/p/ip.php
Date : Sun, 16 Feb 2020 08:49:52 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
スクリプトをgithubで公開します
このコーナーで紹介したスクリプトを保存するため、 github にファイル置き場を作ってみました。興味のある方は次のリンクからソースコードを落としてください。
今後このコーナーで作るミニプログラムは、そのたびに上記のguthubリポジトリに追加していきますので、ときどきチェックしてみてください。
技術情報
今回のPythonスクリプトに関する備忘メモをここに書く予定です。
コメント