スクレイピングを行った際に「403 Forbidden:You don’t have permission to access on this server」のエラーが出た際の対処法を書いておきます。
このエラーの原因はrequestを投げる際のヘッダーにユーザーエージェントを記載していないことで発生するようです。
と書いても、「ヘッダーって何?」「ユーザーエージェント?」という感じだと思うので順番に説明を書いていきたいと思います。
403 Forbiddenエラー
まず403 Forbiddenエラーの発生例です。
仮に以下のようなurlのサイトがあり、pythonのBeautifulSoupを使ってスクレイピングを行うとします。
url = 'https://hogehogehogehogehogehoge.com'
soup = BeautifulSoup(requests.get(url).content,'html.parser')
以下のようなhtmlが返ってきます。
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access this resource.</p>
</body></html>
原因と対処法
原因は先にも述べたように、リクエストの際にヘッダーにユーザーエージェントを記載していないことによります。
ヘッダーとユーザーエージェントとは
ヘッダーとは「ホームページを表示する際にやり取りするデータの一部で、そのデータに関する説明書きが書いてある部分のこと」です。
ユーザーエージェントとは「ホームページを見るときに送られる情報のひとつで、インターネットとかをするときに使うプログラムや機械のこと」です。
詳細な説明はこちらのサイトがわかりやすいので、こちらをご参照ください。
ユーザーエージェントの確認方法
では、どうやってヘッダーにユーザーエージェントを追加するかというのが気になるところです。
まずは、ユーザーエージェント、つまり自分が使っているプログラムや機械が何かを確認する必要があります。
これは以下のサイトで簡単に調べることができます。
上記のサイトをクリックして表示された「現在のブラウザ」という部分がユーザーエージェントに記載する内容です。
ヘッダーへの記載方法
ユーザーエージェントがわかったので、ヘッダーにユーザーエージェントを記載します。
先程記載したpythonのコードに、上で調べたユーザーエージェントの情報を書き加えます。
url = 'https://hogehogehogehogehogehoge.com'
headers = {
"User-Agent": "Mozilla/.... Chrome/.... Safari/...."
}
soup = BeautifulSoup(requests.get(url, headers = headers).content, 'html.parser')
※…の箇所にはブラウザのバージョンなどが記載されているはずです。
これを実行すれば無事403 Forbiddenのエラーは解消されるかと思います。