1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PythonのWebページを取得し、文字エンコードして、表示する

Last updated at Posted at 2020-06-07

前提

いろいろな方法があると思いますが、基礎中の基礎の方法です。

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)

参考

Pythonクローリング&スクレイピング

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?