Python - ウェブスクレイピング - request - HTTP Error 403: Forbidden
- 1. 概要
- 2. 状況
- 3. User-Agent
1. 概要
「request」から「urlopen」で、「HTTP Error 403: Forbidden」という、例外が発生することがあります。
それに対する、対処方法をメモしていきます。
本ページは、下記のサイトを参考にさせていただきました
「【Python】urllib.error.HTTPError の解決方法」
「pythonの403エラーの原因は? HTTP Forbidden」
2. 状況
「403: Forbidden」ちゅうのは、そもそも、クライアントからの要求をサーバが拒否しているちゅうことなのですが。
ブラウザで開こうとすると、ちゃんと開いたりします。
3. User-Agent
実は、「request.urlopen」で、やっておかなあかんのが、リクエストヘッダに「User-Agent」をつけることです。
「User-Agent」ちゅうのは、ま、クライアントで使用しているブラウザのエンジンの名称とでも言いましょうか。
これをつけておかんとあかんのです。
なにをつけるかなぁ、ちゅうのは、実際にブラウザからどっかのウェブサイトを見たときに送られているもので、サーバを持っていれば、ログ等で確認できます。
わたしが、今使っているブラウザですと。
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
ちゅうのを送っています。
まぁ、これをまんま、「request.urlopen」を実行する際に、つけちゃいます。
headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' }
requestLink = request.Request(アクセス先URL, data='割愛', headers=headers, method='割愛')
戻り = request.urlopen(requestLink, timeout='割愛')
てな感じで使えば、「User-Agent」つきで、リクエストを送ることになります。
この対策を行っても解消しないことがあります。
これ、参考サイトに書いてあるんですが、サイトによっては、一程度以上の間隔をあけて、リクエストしないと、「User-Agent」をつけようが、エラーになるようです。
|
|