#背景
ココナラのサービスランキングを確認したく、スクレイピングをやろうとしたら
403 Forbiddenが出力されたので原因と対策を備忘録しておく
症状
下記コードでsoupしたら403 Forbidden
が出力された
import requests
from bs4 import BeautifulSoup
target_url = 'https://coconala.com/categories/231?ref=header'
r = requests.get(target_url)
soup = BeautifulSoup(r.text,"html.parser")
print(soup)
よくやる典型例ですね
import requests
from bs4 import BeautifulSoup
htmlを取得するためにrequests
モジュールをインポート
取得したhtmlを解析するためにBeautifulsoup
をインポート
target_url = 'https://coconala.com/categories/231?ref=header'
r = requests.get(target_url)
soup = BeautifulSoup(r.text,"html.parser")
print(soup)
htmlを取得するURLを定義してgetメソッド
で取得
取得したhtmlをBeautifulsoup
で解析した結果を表示
本来ならhtml文が表示されると思ったところ
結果は下記になった。
結果
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
</body>
</html>
原因
どうやら、ユーザーエージェントに問題があるらしい
ユーザーエージェントをFireFoxに変更したら取得できるとのこと
対策
原因が分かったのでユーザーエージェントを変更する方法を調べた
結果、request.get(URL,headers=ユーザーエージェント(辞書型))
こうするだけで上手くいきました。
下記にコードを載せておきますので参考に
import requests
from bs4 import BeautifulSoup
ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
headers = {'User-Agent': ua}
target_url = 'https://coconala.com/categories/231?ref=header'
r = requests.get(target_url,headers=headers)
soup = BeautifulSoup(r.text,"html.parser")
print(soup)
<!DOCTYPE doctype html>
<html data-n-head="%7B%22lang%22:%7B%22ssr%22:%22ja%22%7D%7D" data-n-head-ssr="" lang="ja">
<head>
<title>プログラミングの代行依頼はオンラインでお得に!PythonやPHP、bot開発など豊富 | ココナラ</title><meta charset="utf-8" data-n-head="ssr"/><meta content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1" data-n-head="ssr" name="viewport"/><meta content="https://coconala.com" data-hid="og:site_name" data-n-head="ssr" 80d7194] .dropdown-content{display:-webkit-box;display:-ms-flexbox;display:flex;overflow-y:auto}.c-trigger[data-v-680d7194]{color:#111;-webkit-transition:opacity .2s;transition:opacity .2s}.c-trigger[data-v-680d7194]:link,.c-trigger[data-v-680d7194]:visited{opacity:1}.c-trigger[data-v-680d7194]:hover{opacity:.7}.c-trigger[data-v-680d7194]:active,.c-trigger[data-v-680d7194]:focus{opacity:1}@media (max-width:600px){.c-trigger[data-v-680d7194]:hover{opacity:1}}.c-trigger_icon[data-v-680d7194]{margin-left:4px}.c-loading[data-v-680d7194]{width:100%;min-height:120px;background-color:#fff}
[data-v-4e309438] .dropdown-content{display:-webkit-box;display:-ms-</script>(省略)
</body>
</html>