前提
いろいろな方法があると思いますが、基礎中の基礎の方法です。
WEBページを取得
サードパーティライブラリのRequestsを使う。標準のライブラリのurllib.requestモジュールでも取得できる。
標準ライブラリだと基本的なGET、POSTのリクエストのみ。HTTPヘッダーの追加やBasic認証などは面倒。
なので、ライブラリ「Requests」を使う。
import requests
# GET
r = requests.get(URL)
# GET でparameter
r = requests.get(URL, params={'key': 'val'})
# POST
p = requests.post(URL, data={'key': 'val'})
# Basic認証
b = requests.get(URL, auth=('ユーザID', 'パスワード'))
WEBページを取得し、エンコードする
レスポンスボディのバイト列からエンコードを推定する
import sys
import requests
url = sys.argv[1]
r = requests.get(url)
#r.json()でjsonで取得も可能
r.encoding = r.apparent_encoding
print(r.text)
metaタグからエンコーディングを取得する
import sys
import re
import requests
url = sys.argv[1]
r = requests.get(url)
#charsetは最初にほうにあると仮定して、最初の方だけ、ASCII文字列としてデコードする
scanned_text = r.content[:1024].decode('ascii', errors='replace')
# デコードした文字列から正規表現でcharsetの値を抜き出す
match = re.search(r'charset=["\']?([\w-]+)', scanned_text)
if match:
r.encoding = match.group(1)
else:
r.encoding = 'utf-8'
print(r.text)