エンジニアステップ

初心者エンジニア(1年目~3年目くらい)のための技術ブログ

pythonのurllib.request.Requestで403エラー時にはユーザエージェントを偽装する

pythonのurllib.request.Requestで403エラー時にはユーザエージェントを偽装すれば対応できました。

※pythonでクローリングを勉強しているのでメモです

 

リスト2.9 urlopen_encoding.pyでエラーが出た時の対処法

リスト2.9 urlopen_encoding.pyで403エラーが出たので対処したソースコード&対処法を書いておきます。

※閲覧権限がないのが問題です 

 

対処時のソースコード

import sys
import urllib
from urllib.request import urlopen

url = "https://gihyo.jp/dp"
headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"
}

request = urllib.request.Request(url, headers=headers)
f = urlopen(request)

# f = urlopen('https://gihyo.jp/dp')
# HTTPヘッダーからエンコーディングを取得する(明示されていない場合はutf-8とする)。
encoding = f.info().get_content_charset(failobj="utf-8")
print('encoding:', encoding, file=sys.stderr) # エンコーディングを標準エラー出力に出力する。

text = f.read().decode(encoding) # 得られたエンコーディングを指定して文字列にデコードする。
print(text) # デコードしたレスポンスボディを標準出力に出力する。

 

対処法

私の環境下では

 raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden

というエラーが出ました。

閲覧権限がないようです。

 

対処法は先程のコードのように、「ユーザエージェントをFireFoxに偽装」しました。