自分用メモ
スクレイピング対象サイトへの初回アクセスで403 Forbiddenが発生した場合、リクエストのHTTPヘッダに**ユーザーエージェント(User Agent)**がないことがエラー原因として考えられる。
エラーになったコード
from bs4 import BeautifulSoup
import requests
# URLからrequestsのresponseを取得
url = "https://○○○○/○○○○/○○○○/"
response = requests.get(url)
# BeautifulSoupの初期化
soup = BeautifulSoup(response.text, 'html.parser')
# HTMLをインデントして取得
html = soup.prettify()
# インデントされたHTMLをファイル出力
f = open('prettify.html', 'w', encoding='UTF-8')
f.write(html)
f.close()
返却されたHTML(403 Forbidden)
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>
403 Forbidden
</title>
</head>
<body>
<h1>
Forbidden
</h1>
<p>
You don't have permission to access /○○○○/○○○○/○○○○/
on this server.
</p>
</body>
</html>
403 Forbidden(You don't have permission to access)を出さないポイント
HTTPヘッダにユーザーエージェント(User Agent)を設定してあげる。
url = "https://○○○○/○○○○/○○○○/"
dummy_user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0'
response = requests.get(url, headers={"User-Agent": dummy_user_agent})
HTML情報が取得出来たコード
from bs4 import BeautifulSoup
import requests
# URLからrequestsのresponseを取得
url = "https://○○○○/○○○○/○○○○/"
dummy_user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0'
response = requests.get(url, headers={"User-Agent": dummy_user_agent})
# BeautifulSoupの初期化
soup = BeautifulSoup(response.text, 'html.parser')
# HTMLをインデントして取得
html = soup.prettify()
# インデントされたHTMLをファイル出力
f = open('prettify.html', 'w', encoding='UTF-8')
f.write(html)
f.close()
参考リンク
mozilla Doc
以上