PythonでWebスクレイピングを行う際、urllib
ライブラリを使用することがよくあります。しかし、特定のWebサイトにアクセスしようとすると、HTTP Error 403: Forbidden
というエラーが発生することがあります。
このエラーは、Webサーバが「非ブラウザ」のリクエストを許可しない設定になっている場合に発生します。具体的には、PythonからのリクエストのデフォルトのHTTPヘッダーが次のようになっており、非ブラウザのリクエストになっています。
'User-Agent': 'python-requests/2.13.0'
この問題を解決するためには、HTTPリクエストヘッダーの内容を「ブラウザ」リクエストとして明示的に書き換えてリクエストを送る必要があります。以下に、その方法を示します。
import urllib.request
url = "http://example.com"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36"}
request = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(request)
このコードでは、User-Agent
ヘッダーをMozilla Firefoxのものに偽装しています。これにより、Webサーバはこのリクエストをブラウザからのものと認識し、HTTP Error 403: Forbidden
エラーを回避できます。
以上が、Pythonとurllibを使用してHTTP Error 403: Forbidden
エラーを解決する方法です。この情報がPythonでWebスクレイピングを行う際の参考になれば幸いです。